# MySQL - Bei ORDER BY leere Felder nach hinten



## suntrop (14. Januar 2010)

Ich habe in der DB eine Spalte mit Wohnorten. Manche sind jedoch leer und wenn ich nach Ort sortiert meine Daten in PHP ausgebe, dann stehen die Datensätze mit den leeren Wohnorten vor den anderen.
Kann ich das ändern?

Hier hatte bereits jemand eine ähnliche Situation:
http://www.tutorials.de/forum/relat...e/285346-probleme-mit-order-leere-felder.html

Aber meine Felder sind nicht mit NULL aufgefüllt, sondern einfach leer.


----------



## Biber2 (14. Januar 2010)

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


----------



## suntrop (14. Januar 2010)

… 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:

```
// 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!


----------



## CPoly (14. Januar 2010)

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.

```
SELECT IF(ud.addressCity='',NULL,ud.addressCity) AS foobar
```

Aber, um mal das query aus dem Link aufzugreifen, kannst du nicht einfach sowas machen:

```
...ORDER BY tbl_personen.vorname='', tbl_personen.vorname ASC
```

Edit: aber genau das meinte Biber2 ja. Nur dass er es noch etwas eleganter macht.


----------



## Biber2 (15. Januar 2010)

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


----------

