[SQL] Krijg meer resultaten met sorteren :?

Pagina: 1
Acties:

  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 17:22
Ik heb de volgende query:
code:
1
2
3
4
5
6
SELECT DISTINCT tblConcertRegels.ConcertID AS iConcertID 
FROM tblConcertRegels, tblConcerten, tblLocatie 
WHERE tblConcerten.ConcertID = tblConcertRegels.ConcertID
AND tblConcertRegels.LocatieID = tblLocatie.LocatieID 
AND tblConcerten.SeizoenID = <dtml-sqlvar SeizoenID type="int"> 
AND tblLocatie.Plaatsnaam = <dtml-sqlvar Plaatsnaam type="string">

en deze geeft netjes dit terug
code:
1
[16, 17, 18, 19, 20, 21, 22, 24, 26, 27, 29, 31, 32, 34, 35, 36, 37]

Nu wil ik graag sorteren op datum omdat dat gewoon netter is!

dat wil ik doen met de volgende SQL query:
code:
1
2
3
4
5
6
7
SELECT DISTINCT tblConcertRegels.ConcertID AS iConcertID 
FROM tblConcertRegels, tblConcerten, tblLocatie 
WHERE tblConcerten.ConcertID = tblConcertRegels.ConcertID
AND tblConcertRegels.LocatieID = tblLocatie.LocatieID 
AND tblConcerten.SeizoenID = <dtml-sqlvar SeizoenID type="int"> 
AND tblLocatie.Plaatsnaam = <dtml-sqlvar Plaatsnaam type="string"> 
ORDER BY tblConcertRegels.Datum

Maar dan krijg ik de volgende resultaten terug :?
code:
1
[16, 17, 18, 18, 18, 19, 20, 21, 22, 24, 26, 27, 29, 31, 32, 34, 35, 36, 37, 37]

Weet iemand hoe ik dit op kan lossen?

edit:
layout ff gefixed :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Ik vind het zeer vreemd dat je kan sorteren op een column die niet in je SELECT - clause voorkomt.
Misschien dat uw DBMS dat achter de schermen zelf doet (de column waarop je sorteert in uw SELECT clause toevoegen), en dat daardoor uw DISTINCT natuurlijk de mist in gaat.

Wat je misschien kunt doen is om een GROUP BY te gebruiken:
code:
1
2
3
4
SELECT concertid, max(datum) as fdatum
...
GROUP BY concertid
ORDER BY fdatum

https://fgheysels.github.io/


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Bijkbaar neemt ie dat datumveld impliciet in de select list op om te kunnen sorteren.
Je distinct loopt dan ook op datum, ergo meer records :)

Who is John Galt?


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 17:22
Als ik bij de bovenste query de datum aan het select toevoeg, dan krijg ik ook dubbele resultaten :? Dus zelfs zonder sorteren....

wierd

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op vrijdag 03 mei 2002 11:39 schreef PhoneTechnician het volgende:
Als ik bij de bovenste query de datum aan het select toevoeg, dan krijg ik ook dubbele resultaten :? Dus zelfs zonder sorteren....

wierd
Vreemd?
Dat is wat distinct doet, die werkt over alle kolommen in je select list.

Who is John Galt?


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Idd.
Die ORDER BY gaat er voor zorgen dat de datum-column ook in uw SELECT clause wordt opgenomen. (Welk DBMS gebruik je trouwens? Normaal gezien moet er een SQL error uitkomen als je een ORDER BY doet op een column die niet in de SELECT voorkomt).
DISTINCT gaat er voor zorgen dat dubbele rijen uit de query gehaald worden.

https://fgheysels.github.io/


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 17:22
Op vrijdag 03 mei 2002 11:39 schreef justmental het volgende:

[..]

Vreemd?
Dat is wat distinct doet, die werkt over alle kolommen in je select list.
Wat ik altijd heb gedacht van distinct, is dat distinct alleen maar unieke waarden kon terug geven. Daarom begong ik metteen allemaal rare dingen te denken zoals bugs en dat soort ellende :)

Maar ik heb het inmiddels opgelost met GROUP BY (thnx whoami)

Ik gebruik nu de volgende SQL code
code:
1
2
3
4
5
6
7
8
SELECT DISTINCT tblConcertRegels.ConcertID AS iConcertID
FROM tblConcertRegels, tblConcerten, tblLocatie 
WHERE tblConcerten.ConcertID = tblConcertRegels.ConcertID
AND tblConcertRegels.LocatieID = tblLocatie.LocatieID 
AND tblConcerten.SeizoenID = <dtml-sqlvar SeizoenID type="int"> 
AND tblLocatie.Plaatsnaam = <dtml-sqlvar Plaatsnaam type="string"> 
GROUP BY tblConcertRegels.ConcertID
ORDER BY tblConcertRegels.Datum

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Op vrijdag 03 mei 2002 11:42 schreef whoami het volgende:
Idd.
Die ORDER BY gaat er voor zorgen dat de datum-column ook in uw SELECT clause wordt opgenomen. (Welk DBMS gebruik je trouwens? Normaal gezien moet er een SQL error uitkomen als je een ORDER BY doet op een column die niet in de SELECT voorkomt).
DISTINCT gaat er voor zorgen dat dubbele rijen uit de query gehaald worden.
In Oracle werkt dat gewoon hoor.
Geen probleem.

Who is John Galt?


  • PhoneTech
  • Registratie: Mei 2000
  • Laatst online: 17:22
Op vrijdag 03 mei 2002 11:42 schreef whoami het volgende:
Idd.
Die ORDER BY gaat er voor zorgen dat de datum-column ook in uw SELECT clause wordt opgenomen. (Welk DBMS gebruik je trouwens? Normaal gezien moet er een SQL error uitkomen als je een ORDER BY doet op een column die niet in de SELECT voorkomt).
DISTINCT gaat er voor zorgen dat dubbele rijen uit de query gehaald worden.
Ik gebruik gedwongen mySQL met ZSQL. bovenstaande is een ZSQL method en ZSQL zorgt metteen voor de juiste invulling van alle quotes enzo...Dus nooit meer gezeuk met escape sequences en al die shit :)
Pagina: 1