[MySQL] Nach zwei Attributen sortieren...
Stefan Kleeschulte
- datenbank
Hi zusammen!
Ich kenne mich zwar ein ganz bisschen mit MySQL aus, und was ich nicht weiß, kann ich normalerweise nachschlagen, aber dieses Problem bekomme ich nicht in den Griff:
Ich habe eine Tabelle, in der es unteranderem eine Spalte "sysname" (VARCHAR) und eine Spalte "name" gibt. "sysname"-Werte können auch NULL sein. Nun möchte ich gerne zunächst alle Zeilen, bei denen "sysname" ungleich NULL ist alphabetisch sortiert nach "name", und dann alle Zeilen, bei dennen "sysname" gleich NULL ist alphabetisch sortiert nach "name" ausgeben.
Beispiel:
sysname1 Andreas
sysname3 Martin
sysname2 Ralf
NULL Christina
NULL Benedikt
NULL Simone
Kann mir jemand sagen, wie ich das mit einiger einzigen Abfrage bewältige?
Grüße,
Stefan
Hallo,
Ich gehe mal davon aus, dass Du die Abfrage mit PHP machst. Ich stelle mir vor, es waere einfacher, 'sysname' und 'name' komplett abzufragen und nach 'name' zu sortieren. Im PHP-Script kannst Du dann sagen 'wenn sysname NULL ist gehoerst du zu diser Gruppe, sonst zu jener'.
Im Ergebnis waere die Sortiereung so wie Du sie Dir vorstellst.
Dieter
Hallo,
Ich habe eine Tabelle, in der es unteranderem eine Spalte "sysname" (VARCHAR) und eine Spalte "name" gibt. "sysname"-Werte können auch NULL sein. Nun möchte ich gerne zunächst alle Zeilen, bei denen "sysname" ungleich NULL ist alphabetisch sortiert nach "name", und dann alle Zeilen, bei dennen "sysname" gleich NULL ist alphabetisch sortiert nach "name" ausgeben.
Beispiel:
sysname1 Andreas
sysname3 Martin
sysname2 Ralf
NULL Christina
NULL Benedikt
NULL SimoneKann mir jemand sagen, wie ich das mit einiger einzigen Abfrage bewältige?
Die Abfrage müsste in je einer zusätzlichen Spalte einmal die Namen ohne sysname und zum Anderen die Namen mit sysname separieren. Sortiert wird dann nach Name_ohne_sysname, Name_mit_sysname. Da die NULL-Werte der Namen_ohne_sysname nach oben sortiert werden, und hier (gleiche Werte NULL) die Sortierung nach Name_mit_sysname greift, sollte die gewünschte Reihenfolge entstehen.
SELECT sysname, name, IF([sysname] IS NULL,[name],NULL) AS nosn, IF([sysname] IS NOT NULL,[name],NULL) AS nmsn
FROM TabelleN
ORDER BY IF([sysname] IS NULL,[name],NULL), IF([sysname] IS NOT NULL,[name],NULL);
viele Grüße
Axel
Hi Axel!
Die Abfrage müsste in je einer zusätzlichen Spalte einmal die Namen ohne sysname und zum Anderen die Namen mit sysname separieren. Sortiert wird dann nach Name_ohne_sysname, Name_mit_sysname. Da die NULL-Werte der Namen_ohne_sysname nach oben sortiert werden, und hier (gleiche Werte NULL) die Sortierung nach Name_mit_sysname greift, sollte die gewünschte Reihenfolge entstehen.
SELECT sysname, name, IF([sysname] IS NULL,[name],NULL) AS nosn, IF([sysname] IS NOT NULL,[name],NULL) AS nmsn
FROM TabelleN
ORDER BY IF([sysname] IS NULL,[name],NULL), IF([sysname] IS NOT NULL,[name],NULL);
Erstmal danke für deine Mühe, dass das so kompliziert ist, habe ich nicht gedacht.
MySQL meldet allerdings:
You have an error in your SQL syntax near '[sysname] IS NULL,[name],NULL) AS nosn, IF([sysname] IS NOT NULL,[name],NULL) AS' at line 1
Den Tabellennamen habe ich angepasst. Hast du noch eine Idee? Wenn nich, is auch nicht schlimm...
Grüße,
Stefan
Hi Stefan,
Erstmal danke für deine Mühe, dass das so kompliziert ist, habe ich nicht gedacht.
Du brauchst eine 3GL-Funktionalität in einer 4GL - das ist nun mal nicht der Zweck der Sache. (Ich würde Dein Problem mit zwei Queries lösen wollen.)
Hast du noch eine Idee? Wenn nich, is auch nicht schlimm...
Statt der verwendung des "if" könntest Du versuchen, in einer dritten Spalte über eine concat-artige Konstruktion einen gemeinsamen Sortier-Schlüssel zu bauen und nach diesem dann zu sortieren.
Dies setzt allerdings ggf. Kenntnisse über die möglichen Inhalt von "sysname" voraus ...
Viele Grüße
Michael