[MySQL] Orderen in zelf gedefinieerde volgorde

Pagina: 1
Acties:

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-05 13:54
Ik vroeg me af of het in MySQL mogelijk is een kolom te sorteren op een zelf aangegeven volgorde. Dat je een kolom dus selecteert op bijvoorbeeld zo'n manier:

+-----------+
|   kolom   |
+-----------+
| C         |
| A         |
| D         |
| B         |
+-----------+


In plaats van ABCD of DCBA.

Of moet dit echt gedaan worden in de taal er omheen?

zeroxcool.net - curity.eu


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waar wil je die sortering zien?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Heeft MySQL een CASE WHEN constructie? Dan kan het nl. wel in de query

code:
1
ORDER BY CASE veld WHEN 'c' THEN 1 WHEN 'a' THEN 2 [etc] END

Oops! Google Chrome could not find www.rijks%20museum.nl


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-05 13:54
In het resultaat, of in welke context bedoel je dit?

zeroxcool.net - curity.eu


Verwijderd

Voeg een veld "volgorde" toe aan je table en sorteer daarop?

  • TafkaT
  • Registratie: Januari 2000
  • Laatst online: 21:44
edit: ^^^^^^ what he said ^^^^^ :)
door een rij toe te voegen die de volgorde aangeeft bereik je toch hetzelfde? Of bedoel je het misschien anders?

[ Voor 16% gewijzigd door TafkaT op 04-02-2005 20:45 ]


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-05 13:54
P_de_B schreef op vrijdag 04 februari 2005 @ 20:32:
Heeft MySQL een CASE WHEN constructie? Dan kan het nl. wel in de query

code:
1
ORDER BY CASE veld WHEN 'c' THEN 1 WHEN 'a' THEN 2 [etc] END
Dat was inderdaad de bedoeling :). Hartelijk dank, raar dat hier in de MySQL manual niet expliciet vermeld staat dat het ook bij ORDER condities gebruikt kan worden:
http://dev.mysql.com/doc/mysql/en/case-statement.html
Verwijderd schreef op vrijdag 04 februari 2005 @ 20:43:
Voeg een veld "volgorde" toe aan je table en sorteer daarop?
Als er geen 'exotische' oplossing was geweest had ik dat inderdaad gedaan. Maar dit is uiteindelijk, gezien je model de mooiste oplossing.

[ Voor 27% gewijzigd door zeroxcool op 04-02-2005 20:56 . Reden: quoteje toegevoegd ]

zeroxcool.net - curity.eu


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Maar waar dient deze manier van presentatie voor dan? Ff nieuwsgierig

stp - PSN ID: stp_4


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-05 13:54
Om het even snel uit te leggen. We zijn bezig met een front end te schrijven voor een DNS server. Als je dan een domein bekijkt zie je dus alle records, nu wilde we deze op type laten weergeven, dus alle A records 'na elkaar' en alle MX records na elkaar. Dit gaat natuurlijk gewoon door 'order by type asc' oid te doen. Echter, we vinden NS records belangrijker dan A records, en A records zijn belangrijker dan CNAME records. Dus moeten alle NS records bovenaan staan, daaronder de MX records, daaronder de PTR records, etc. etc.

Daarom deze oplossing dus.

zeroxcool.net - curity.eu


Verwijderd

Een extra tabel record_type met daarin een id, de naam en de belangrijkheid, is wellicht een mooiere oplossing.

[ Voor 76% gewijzigd door Verwijderd op 04-02-2005 21:06 ]


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Daar zat ik ook net aan te denken. Is ook een stuk makkelijker te onderhouden naar mijn inziens. Desnoods maak je extra kolom aan in dezelfde tabel met een belangrijkheidsfactor. Een extra tabel lijkt me misschien overbodig want dat in het geval hierboven zou het een kopie opleveren van de originele tabel met als extra de kolom 'belangrijkheid".

[ Voor 4% gewijzigd door stp_4 op 04-02-2005 21:16 ]

stp - PSN ID: stp_4


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-05 13:54
Verwijderd schreef op vrijdag 04 februari 2005 @ 21:06:
Een extra tabel record_type met daarin een id, de naam en de belangrijkheid, is wellicht een mooiere oplossing.
Zoals aangegeven, als er datgene wat ik vroeg niet was, dan was het zoiets geworden :). Persoonlijk vond ik deze oplossing nog niet zo heel dirty.

Overigens was die oplossing inderdaad beter geweest als er een wat dynamischere data gesorteerd moest worden. In mijn geval zullen hier misschien in de loop der jaren (IPv6) twee meer mogelijke waarden bijkomen.

[ Voor 31% gewijzigd door zeroxcool op 04-02-2005 21:26 . Reden: statisch/dynamisch gedoe toegevoegd ]

zeroxcool.net - curity.eu


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Persoonlijk vind ik de 'ORDER BY hardgecodeerd' iets minder fraai dan in de tabel op te vangen welke belangrijkheids status elk record heeft. Als de volgorde verandert hoef je dit niet in de code, script, sp or what ever aan te passen maar kun je db tool of backend applicatie de status van records aanpassen. Stel dat je de naam van het type wil veranderen ofzo dan heeft dat ook geen invloed op het sorteren.

m.a.w. probeer altijd hardgecodeerde zaken zoveel mogelijk te vermijden. ondanks het feit dat het weinig of nooit zal veranderen, je zal er later altijd onnodige problemen mee krijgen....

[ Voor 39% gewijzigd door stp_4 op 05-02-2005 04:43 ]

stp - PSN ID: stp_4

Pagina: 1