mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 06:24 Benutzername: Passwort: Auto-Login

Thema: [mysql] ORDER BY mit CASE oder IF? vom 12.06.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [mysql] ORDER BY mit CASE oder IF?
Seite: 1, 2  Weiter
Autor Nachricht
chrikle
Threadersteller

Dabei seit: 02.05.2002
Ort: NRW
Alter: 47
Geschlecht: Männlich
Verfasst Do 12.06.2008 09:03
Titel

[mysql] ORDER BY mit CASE oder IF?

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Kash

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Do 12.06.2008 10:05
Titel

Antworten mit Zitat Zum Seitenanfang

du kannst keine IF - ELSE zweige in die SQL Abfrage einbauen.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Do 12.06.2008 10:08
Titel

Antworten mit Zitat Zum Seitenanfang

@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 *zwinker*


Zuletzt bearbeitet von Pixelpole am Do 12.06.2008 10:14, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
chrikle
Threadersteller

Dabei seit: 02.05.2002
Ort: NRW
Alter: 47
Geschlecht: Männlich
Verfasst Do 12.06.2008 10:21
Titel

Antworten mit Zitat Zum Seitenanfang

Pixelpole hat geschrieben:
@kash: wenn man keine ahnung hat einfach mal die fresse halten: mysql-doku

* Ja, ja, ja... *

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. *Schnief*


Pixelpole hat geschrieben:
//Wuahh da seh ic hdoch nen fehler: es heisst am ende nicht end sondern end case *zwinker*


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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Kash

Dabei seit: 07.11.2002
Ort: Schopfheim
Alter: 41
Geschlecht: Männlich
Verfasst Do 12.06.2008 10:52
Titel

.

Antworten mit Zitat Zum Seitenanfang

...

Zuletzt bearbeitet von Kash am Sa 14.06.2008 11:03, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Do 12.06.2008 10:57
Titel

Antworten mit Zitat Zum Seitenanfang

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...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Do 12.06.2008 10:59
Titel

Antworten mit Zitat Zum Seitenanfang

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.... Grins
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
chrikle
Threadersteller

Dabei seit: 02.05.2002
Ort: NRW
Alter: 47
Geschlecht: Männlich
Verfasst Do 12.06.2008 11:11
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ä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()” ???
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.