mysql5: Sortierung will nicht, wie ich will
    
Lukas
    
    
      
    
  - datenbank
- 0 tinita- 0 tinita
- 0 Lukas
- 0 Christian Kruse
 
 nicht angemeldet
 nicht angemeldetHallo,
Was macht mysql, wenn
  
LEFT JOIN reihenfolge r ON r.ID = t.ID  
...  
order by r.eintrag,t.tid  
zu einem Eintrag der Tabelle mit dem Alias t keine Reihenfolge in der Tabelle "reihenfolge" eingetragen ist. (eintrag=int, tid=int)
Konkretes Beispiel:
Teile: (Alias t)     reihenfolge: (Alias r)
ID,tid               ID,eintrag
-------              -----------------------
1,5                  1,1
2,6                  2,4
3,7                  3,2
4,8                  4,3
5,9
6,10
Ziel wäre gewesen, daß die Reihenfolge der Query
1
3
4
2
5
6
wäre, aber es kommt etwas anderes heraus:
5
6
1
3
4
2
Kann ich die ORDER BY Klausel so formulieren, daß mein gewünschtes Ergebnis heraus kommt?
Lukas
LEFT JOIN reihenfolge r ON r.ID = t.ID
...
order by r.eintrag,t.tid
  
  
> Kann ich die ORDER BY Klausel so formulieren, daß mein gewünschtes Ergebnis heraus kommt?  
  
mysql sortiert NULL halt an den anfang, und dann erst wird nach t.tid sortiert. das ist schon richtig so. (wobei man natürlich darüber streiten kann, wo eine NULL in der sortierung hingehört)  
  
versuch mal das hier:  
~~~sql
  
order by IFNULL(r.eintrag,t.tid)  
ausserdem habe ich noch folgenden trick gefunden:
  
order by -r.eintrag DESC, t.tid  
habs nicht ausprobiert.
anmerkung: der zweite vorschlag sortiert einfach die NULLs nach hinten, was aber bei einem anderen daten als im beispel dann wieder falsch sein könnte. fand ich nur einen interessanten trick.
Hallo tinita,
mysql sortiert NULL halt an den anfang, und dann erst wird nach t.tid sortiert. das ist schon richtig so. (wobei man natürlich darüber streiten kann, wo eine NULL in der sortierung hingehört)
versuch mal das hier:
order by IFNULL(r.eintrag,t.tid)
  
Das war mir neu, daß mysql das so sortiert. Die IFNULL-Weiche funktioniert einwandfrei, danke.  
  
> ausserdem habe ich noch folgenden trick gefunden:  
> ~~~sql
  
> order by -r.eintrag DESC, t.tid  
> 
habs nicht ausprobiert.
Mir gefällt die IFNULL-Weiche besser, die ist schöner lesbar, finde ich.
Danke, Lukas
Moin tinita,
mysql sortiert NULL halt an den anfang, und dann erst wird nach t.tid sortiert. das ist schon richtig so. (wobei man natürlich darüber streiten kann, wo eine NULL in der sortierung hingehört)
Die NULL-Behandlung in SQL ist allgemein eher unintuitiv. NULL = NULL ist z.B. auch NULL. Auch Typecasts auf NULL enden in NULL: SELECT NULL::boolean, NULL::text ergibt NULL, NULL.
LG,
 CK