Autor |
Nachricht |
chrikle
Threadersteller
Dabei seit: 02.05.2002
Ort: NRW
Alter: 47
Geschlecht:
|
Verfasst Do 12.06.2008 09:03
Titel [mysql] ORDER BY mit CASE oder IF? |
|
|
Hallo!
Habe folgendes Problem:
Es gibt eine mySQL-DB mit einer Tabelle die mehrere Spalten enthält.
Unter anderem den Vornamen und Nachname.
Nun möchte ich diese entsprechend sortiert ausgeben, aber so,
das wenn kein Vorname angegeben wurde - also NULL ist - das halt der
Nachname als Sortier-Kriterium herhalten soll.
Hab mal sowas vesucht:
Code: | SELECT * FROM Kontaktdaten ORDER BY CASE WHEN 'Name' THEN Name ELSE 'Nachname' END ASC |
Aber die Anweisung wird ignoriert.
Wäre für jeden Tipp/Hilfe dankbar.
Gruß
Chris
|
|
|
|
|
Kash
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 12.06.2008 10:05
Titel
|
|
|
du kannst keine IF - ELSE zweige in die SQL Abfrage einbauen.
|
|
|
|
|
Anzeige
|
|
|
Pixelpole
Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht:
|
Verfasst Do 12.06.2008 10:08
Titel
|
|
|
@kash: wenn man keine ahnung hat einfach mal die fresse halten: mysql-doku
@Threadersteller: Ich denke es ist im saubersten wenn du das ganze innerhalb deines Skriptes löst.
ansonsten könntest du das standardmäßige ORDER BY benutzen. dieses nimmt auch mehrere spalten an. Beispiel:
SELECT spalte1, spalte2, FROM tabelle ORDER BY spalte 1 ASC, spalte2 DESC
//Wuahh da seh ic hdoch nen fehler: es heisst am ende nicht end sondern end case
Zuletzt bearbeitet von Pixelpole am Do 12.06.2008 10:14, insgesamt 2-mal bearbeitet
|
|
|
|
|
chrikle
Threadersteller
Dabei seit: 02.05.2002
Ort: NRW
Alter: 47
Geschlecht:
|
Verfasst Do 12.06.2008 10:21
Titel
|
|
|
Pixelpole hat geschrieben: | @kash: wenn man keine ahnung hat einfach mal die fresse halten: mysql-doku |
Pixelpole hat geschrieben: | @Threadersteller: Ich denke es ist im saubersten wenn du das ganze innerhalb deines Skriptes löst.
ansonsten könntest du das standardmäßige ORDER BY benutzen. dieses nimmt auch mehrere spalten an. Beispiel:
SELECT spalte1, spalte2, FROM tabelle ORDER BY spalte 1 ASC, spalte2 DESC |
Ja, ich weiß, aber es wäre mir lieber gleich schon die Daten sortiert zu bekommen.
Pixelpole hat geschrieben: | //Wuahh da seh ic hdoch nen fehler: es heisst am ende nicht end sondern end case |
Habe beide Versionen versucht, kommt aber immer folgende Warnung bei raus:
Code: | Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource |
Ich verstehe die CASE-Anweisung so, das wenn NAME einen Wert hat, soll er NAME als Sortier-Spalte nehmen, ansonsten NACHNAME. Das ist doch soweit richtig, oder? Nur das es nicht funktioniert ... Komisch ...
Gruß
Chris
ANSONSTEN hatte ich es mal so versucht:
"... ORDER BY IF('Name' IS NOT NULL, 'Name', 'Nachname') ..."
Aber da werden Die Spalten total unsortiert ausgegeben ... ??
Zuletzt bearbeitet von chrikle am Do 12.06.2008 10:25, insgesamt 1-mal bearbeitet
|
|
|
|
|
Kash
Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht:
|
Verfasst Do 12.06.2008 10:52
Titel . |
|
|
...
Zuletzt bearbeitet von Kash am Sa 14.06.2008 11:03, insgesamt 1-mal bearbeitet
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Do 12.06.2008 10:57
Titel
|
|
|
versuchs mal auf n anderen weg im select statement nicht im order...
Code: |
SELECT *,
(CASE
WHEN NAME IS NOT_NULL THEN NAME
ELSE NACHNAME
END) as myorder
ORDER BY myorder;
|
is nicht getestet, aber ich denke, du weißt, worauf ich hinaus will. erzeuge erste eine eigene spalte - entweder mit name oder nachname und sortiere die dann...
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Do 12.06.2008 10:59
Titel
|
|
|
Kash hat geschrieben: |
was denkst du eigentl wer du bist.im internet immer schön das maul aufreisen und im realen leben würdest dir einscheißen. |
ohne mich einmischen zu wollen... aber das glaub ich eher nicht....
|
|
|
|
|
chrikle
Threadersteller
Dabei seit: 02.05.2002
Ort: NRW
Alter: 47
Geschlecht:
|
Verfasst Do 12.06.2008 11:11
Titel
|
|
|
pixelpapst303 hat geschrieben: | versuchs mal auf n anderen weg im select statement nicht im order...
is nicht getestet, aber ich denke, du weißt, worauf ich hinaus will. erzeuge erste eine eigene spalte - entweder mit name oder nachname und sortiere die dann... |
Hi!
Ja, daran habe ich mittlerweile auch schon gedacht ...
werde mal versuchen dafür eine Lösung zu finden ...
Gruß
Chris
|
|
|
|
|
|
|
|
Ähnliche Themen |
MySQL / case & group by & order
[MySql] ORDER BY - Frage
MySql ['order' wird nicht ausgeführt]
[mysql/php - GELÖST] ORDER BY - sortiert nicht richtig
mysql fulltext matches und case sensitivity
Alternative zu „ORDER BY RAND()” ???
|
|