# kurze Frage zu einem Query



## DP (4. Dez 2007)

hallo,

stehe gerade auf dem schlauch.

folgende abfrage wird mit mysql 4.0.18 generiert:


```
SELECT 
bestellungen.auftragsnr, 
datum, 
zahlung
FROM 
bestellungen 
LEFT JOIN 
zahlungseingaenge 
ON bestellungen.auftragsnr = zahlungseingaenge.auftragsnr 
ORDER BY datum
```

ergebnis:


```
+------------+---------------------+---------------------+
| auftragsnr | datum               | zahlung             |
+------------+---------------------+---------------------+
|          1 | 2007-11-28 09:46:45 |              [NULL] |
|          2 | 2007-11-28 10:12:19 | 2007-11-30 18:06:21 |
|          3 | 2007-11-30 15:25:48 |              [NULL] |
+------------+---------------------+---------------------+
```

ich brauche aber ein ergebnis, das bei der sortierung nach datum und zahlung vergleicht, so dass am ende die db folgendes liefert:


```
+------------+---------------------+---------------------+
| auftragsnr | datum               | zahlung             |
+------------+---------------------+---------------------+
|          1 | 2007-11-28 09:46:45 |              [NULL] |
|          3 | 2007-11-30 15:25:48 |              [NULL] |
|          2 | 2007-11-28 10:12:19 | 2007-11-30 18:06:21 |
+------------+---------------------+---------------------+
```

weil von auftrag 2 der zahlungseingang später ist als von auftrag 3 das datum.

also im klartext soll der bei der sortierung wenn zahlung != null ist das zahlungsdatum und bei zahlung == null das bestelldatum als sortierkriterium nehmen... jemand einen tip?!

danke.


----------



## SlaterB (4. Dez 2007)

ORDER BY zahlung, datum


----------



## DP (4. Dez 2007)

:shock: 

funktioniert so leider nicht, da die nuller zuerst kommen...

evtl. deutlicheres beispiel wie es aussehen soll:


```
+------------+---------------------+---------------------+ 
| auftragsnr | datum               | zahlung             | 
+------------+---------------------+---------------------+ 
|          1 | 2007-11-28 09:46:45 |              [NULL] | 
|          3 | 2007-11-30 15:25:48 |              [NULL] | 
|          2 | 2007-11-28 10:12:19 | 2007-11-30 18:06:21 | 
|          4 | 2007-11-30 22:14:03 |              [NULL] | 
+------------+---------------------+---------------------+
```


----------



## SlaterB (4. Dez 2007)

tja, für sowas wurden dann höhere Programmiersprachen erfunden 

hast du sowas wie CASE oder DECODE?
unter ORACLE könnte
ORDER BY DECODE(zahlung,null,datum,zahlung) 
(ORDER BY wenn Zahlung null dann datum, sonst zahlung)
gehen


----------



## DP (4. Dez 2007)

hast mich aber auf ne idee gebracht  :applaus: 

so gehts:


```
order by 
if(zahlung > datum, zahlung, datum)
```

 :toll:


----------



## SlaterB (4. Dez 2007)

und dein Satz
> soll der bei der sortierung wenn zahlung != null ist das zahlungsdatum und bei zahlung == null das bestelldatum als sortierkriterium nehmen

brachte dich nicht auf diese Idee, wenn du diese Syntax schon kanntest?


----------



## DP (4. Dez 2007)

SlaterB hat gesagt.:
			
		

> wenn du diese Syntax schon kanntest?



wer hat dir denn diesen bären aufgebunden?! :lol:


----------

