MySQL - Bei ORDER BY leere Felder nach hinten

Moin suntrop,

ich halte die Beschreibung "Aber meine Felder sind nicht mit NULL aufgefüllt, sondern einfach leer." für suboptimal.

Möglicherweise soll es heißen, dass dieses Feld nicht NULLABLE mit Default "" (Leerstring) ist?

Anyhow - wenn du nicht auf NULL prüfen kannst so kannst du doch in Analogie zu dem verlinkten Beispiel die ORDER BY-Clause auf
1) True/false ==> (length(trim(wohnort)) =0)
2) und danach wie jetzt schon "Wohnort" alphabetisch
...legen.

Grüße
Biber
 
Zuletzt bearbeitet:
… da muss ich nochmal nachhaken, da ich es nicht richtig verstehe.

True/false ==> (length(trim(wohnort)) =0)
Das kann ich nicht interpretieren.
Mein PHP sieht (im Aussichnitt) so aus:
PHP:
// Reihenfolge
if ($order != false) {
	switch ($order):
		case 'Name':
			$sql .= ' ORDER BY ud.name';
			break;
		case 'Stadt':
			$sql .= ' ORDER BY ud.addressCity';
			break;
		case 'Stadt-rueckwaerts':
			$sql .= ' ORDER BY ud.addressCity DESC';
			break;
		default:
			$sql .= ' ORDER BY ud.name';
	endswitch;
}
Wie kann ich dein Vorschlag hier einfügen?

Danke für deine Hilfe!
 
Du kannst es genauso lösen, wie bei deinem anderen Problem vorher auch. Nur musst bei der Abfrage du aus deinem Leerstring ein NULL machen.
SQL:
SELECT IF(ud.addressCity='',NULL,ud.addressCity) AS foobar

Aber, um mal das query aus dem Link aufzugreifen, kannst du nicht einfach sowas machen:
SQL:
...ORDER BY tbl_personen.vorname='', tbl_personen.vorname ASC

Edit: aber genau das meinte Biber2 ja. Nur dass er es noch etwas eleganter macht.
 
Zuletzt bearbeitet:
Moin suntrop,

nur der Vollständigkeit halber, falls es nicht schon durch CPolys Erklärung klar geworden ist (Thx@CPoly!):

Wo bei dir jetzt EIN "ORDER BY"-Kriterium steht
-> $sql .= ' ORDER BY ud.addressCity DESC';
...wären es bei mir deren zwo:
-> $sql .= ' ORDER BY ( length(trim(ud.addressCity)) =0), ud.addressCity DESC';

[ungetestete Skizze]

Grüße
Biber
 
Zurück