[mysql] ORDER BY {IN}

Pagina: 1
Acties:

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Stel ik heb in een query het volgende:

WHERE id IN ('5','3','2','6')

Nu wil ik dat hij sorteert op deze volgorde, dus

5,3,2,6 Hoe doe ik dat? Nu pakt hij ze er willekeurig uit lijkt wel, in ieder geval niet in de volgorde zoals ze in de IN staan?

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
Volgens mij krijg je ze wel in die volgorde terug als je de query op deze manier opbouwt:

SQL:
1
WHERE id='5' OR id='3' OR id='2' OR id='6';

If I can't fix it, it ain't broken.


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Dat zou jammer zijn, maar die twee zijn toch equivalent wat ik me kan herinneren?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Zijn ze ook; Borizz' oplossing doet hetzelfde als de jouwe als het goed is.

Heb je verder wel gezocht? Ik kom in de search bijvoorbeeld P_de_B in "[MySQL] Orderen in zelf gedefinieerde vo..." tegen die je precies vertelt wat je kan doen. :)

edit:
Niet dat het uitmaakt voor je probleem, maar waarom zijn je ID's strings is plaats van integers? :?

[ Voor 17% gewijzigd door NMe op 01-04-2007 20:12 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Maakt dat uit dan die id in strings? Ik dacht dat dat voor security beter was om overal ' omheen te zetten?

[ Voor 50% gewijzigd door RSD op 01-04-2007 20:19 ]


  • DizzyVacation
  • Registratie: November 2006
  • Niet online
RSD schreef op zondag 01 april 2007 @ 20:13:
Maakt dat uit dan die id in strings? Ik dacht dat dat voor security beter was om overal ' omheen te zetten?
Dat is alleen als je er variabele tussen gaat zetten, maar normaal doe je het zo dat je integers met integers vergelijkt, dit gewoon om het overzichtelijk te houden, dan ziet iedereen meteen dat het integers zijn.

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Maar dat orderen, ik lees in dat topic dus dat het eigenlijk niet kan.

Ik hou namelijk een soort geschiedenis bij van id's in een sessie. Ik wil het in deze volgorde uit de database halen, ... hoe kan ik dat het beste doen dan?

In een database aangeven waar op gesorteerd dient te worden is er dus niet bij!

[ Voor 15% gewijzigd door RSD op 01-04-2007 20:29 ]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
RSD schreef op zondag 01 april 2007 @ 20:25:
Maar dat orderen, ik lees in dat topic dus dat het eigenlijk niet kan.

Ik hou namelijk een soort geschiedenis bij van id's in een sessie. Ik wil het in deze volgorde uit de database halen, ... hoe kan ik dat het beste doen dan?
Een volgorde kolom toevoegen, of een kolom met een timestamp erin?

If I can't fix it, it ain't broken.


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
SQL:
1
2
3
WHERE id IN (5,3,2,6)
ORDER BY
id = 5 DESC, id = 3 DESC, id = 2 DESC, id = 6 DESC


moet je wel je query dynamisch opbouwen... maar dat doe je neem ik aan al...

[ Voor 27% gewijzigd door P.O. Box op 01-04-2007 20:30 ]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
wordt wel een heel lange query dan als er 20 id's in staan, kan dat kwaad?

  • robbert
  • Registratie: April 2002
  • Laatst online: 01-12 18:50
RSD schreef op zondag 01 april 2007 @ 20:32:
wordt wel een heel lange query dan als er 20 id's in staan, kan dat kwaad?
Ik denk niet dat mysql met dat soort aantallen enige moeite heeft. Misschien als je over >10.000 gaat praten, maar dat zo je eens uit moeten proberen.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
RSD schreef op zondag 01 april 2007 @ 20:32:
wordt wel een heel lange query dan als er 20 id's in staan, kan dat kwaad?
je kunt ook nog zoiets proberen, er zijn zoveel mogelijkheden ;)

SQL:
1
2
ORDER BY
LOCATE(CONCAT('-', id, '-'), '-5-3-2-6-')

Verwijderd

ORDER BY FIELD(id, 5, 3, 2, 6) :X

Dat niemand anders daarmee kwam....

Enne overal quotes omheen zetten om SQL injection te voorkomen is wel erg basic, daar zijn vast wel nettere oplossingen voor ;)

[ Voor 46% gewijzigd door Verwijderd op 01-04-2007 23:37 ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ajjj, dat ik daar niet opgekomen ben 8)7
Pagina: 1