Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] dubbele distinct?

Pagina: 1
Acties:

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
Ik heb een MySQL database met daarin o.a. de volgende kolommen.

shopidproductnaamprijs
1doos1
1doos2
1krat3
2krat4
2krat5
2doos6


Nou wil ik graag in een (of meerdere) SQL query van elk product slechts 1 record laten zien, waarbij elk weergegeven record van een nog niet eerder gebruikte shopid is.

Ik heb zelf al zitten spelen met DISTINCT, maar hierbij kreeg ik enkel unieke producten, maar nog wel duplicate shopid's en dat is niet de bedoeling.

SELECT DISTINCT beschrijving,prijs FROM product

Hoe kan ik hierna ook nog een DISTINCT op shopid uitvoeren?

Verwijderd

Sequence schreef op zaterdag 29 maart 2008 @ 13:53:
Nou wil ik graag in een (of meerdere) SQL query van elk product slechts 1 record laten zien, waarbij elk weergegeven record van een nog niet eerder gebruikte shopid is.
Leg 's uit wat je precies terug wilt krijgen? er zijn nl meerdere opties...
1 doos 1, 2 krat 4
1 doos 2, 2 krat 4
1 krat 3, 2 doos 6

enz.

Tip: met alleen DISTINCT gaat je dit niet lukken, met subselects en bv. WHERE NOT IN... waarschijnlijk wel.

  • Sequence
  • Registratie: Maart 2000
  • Laatst online: 27-05-2024

Sequence

Online marketing

Topicstarter
welke opties ik krijg maakt me niet uit, als eenzelfde beschrijving maar maximaal 1x voorkomt en dat bij de volgende beschrijving ın het resultaat weer een nieuw niet eerder gebruikt shopid naar voren komt.

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Maar niet elke winkel biedt dezelfde producten aan, dus als je een algoritme schrijft moet je wellicht op volgorde letten cq soms opnieuw proberen of backtracken. Een optimalisatie is dan om met de winkel met de minste producten te beginnen, aangezien die winkel later moeilijker in te passen is.

Ik heb echter zo mijn twijfels bij het nut van deze hele feature. Volstaat een lijst van alle producten met per product een random shopid, of een eenvoudiger arbitraire, maar constante verdeling niet gewoon? Sowieso kan wat jij wil niet als #producten > #shops, want dan gaan in een volledige lijst van producten sowieso dubbele shopids voorkomen.

Mijn mening: Random data queries zijn vaker wel dan niet een gimmick. Vraag jezelf af of het echt nut heeft.

[ Voor 8% gewijzigd door Voutloos op 29-03-2008 17:44 ]

{signature}


  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 22:59

CyBeRSPiN

sinds 2001

Gewoon de shops joinen in een subquery met product en prijs, in de subquery doe je dan LIMIT 1, en de gewenste sortering, heb je geen distinct nodig ;)

  • st0p
  • Registratie: April 2004
  • Laatst online: 19-07-2024
Als je RDBMS limit ondersteund ja :+

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Sequence schreef op zaterdag 29 maart 2008 @ 13:53:
Nou wil ik graag in een (of meerdere) SQL query van elk product slechts 1 record laten zien, waarbij elk weergegeven record van een nog niet eerder gebruikte shopid is.
Dat kan niet in een query, omdat SQL niet de mogelijkheid biedt om rij x van een resultset van rij y ( y < x) af te laten hangen. Je zal zelf een stored procedure moeten schrijven die dit doet, of de resultset in je programmeertaal moeten doorlopen om de resultaten te zoeken die je wilt hebben.

Wie trösten wir uns, die Mörder aller Mörder?


  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 22:59

CyBeRSPiN

sinds 2001

st0p schreef op zondag 30 maart 2008 @ 04:02:
Als je RDBMS limit ondersteund ja :+
Haha, lol. Ok, ik ben te verwend met PostgreSQL dan denk ik. MySQL kan dus blijkbaar (nog) geen complete syntax aan in de subqueries.
Maar áls het wel kon, dan heb je dus niet een stored procedure of programma nodig. Want als je alle shops afgaat en 1 op 1 linkt aan een product en prijs (met LIMIT dus), kun je per definitie geen dubbele shops in je resultset krijgen.

  • DukeBox
  • Registratie: April 2000
  • Laatst online: 18:56

DukeBox

loves wheat smoothies

Bedoel je niet gewoon grouping ?

SELECT beschrijving, prijs FROM product GROUP BY shopid, beschrijving

[ Voor 53% gewijzigd door DukeBox op 31-03-2008 00:10 ]

Duct tape can't fix stupid, but it can muffle the sound.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat weer een bogus query is (die MySQL overigens wel toestaat). Bij een GROUP BY kun je alleen een kolom selecteren dat in de group by clausule staat, of een aggregate functie. Er zijn immers meerdere prijzen mogelijk per (shopid, beschrijving) combinatie, dus welke wil je dan hebben? Je kunt een prijs selecteren mbv een aggregate functie zoals MIN(), in dat geval krijg je de goedkoopste.

Overigens is dit niet wat de TS wil, en is het probleem lang niet zo simpel op te lossen zoals Voutloos al aangaf.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Inderdaad, voor wat cyberspin voorstelt kan best wel een query geschreven worden, maar het hele uitgangspunt van cyberspin is verkeerd omdat TS primair een lijst van producten wilt ipv een lijst van winkels. ;)
Verder negeert iedereen vrolijk de door mij genoemde problemen, omdat het roepen van halfbakken queries die niet de juiste oplossing zijn blijkbaar leuker is. :/

{signature}


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:17

.oisyn

Moderator Devschuur®

Demotivational Speaker

So what else is new ;)

Om die problemen waar Voutloos het over heeft kracht bij te zetten, hier een voorbeeld:

shopidproductnaamprijs
1doos1
1krat2
1pallet3

En nu?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1