Sven Rautenberg: Left Join und groupierung führt zu verfälschten Ergebniss

Beitrag lesen

Moin!

Wenn ich

$sql = "SELECT a.id, a.name, b.text FROM table1 a LEFT JOIN table2 b ON a.id=b.id ORDER by a.id DESC Limit 20 ";

ausführe kommmt

andreas dddddddddd
andreas 5555555555
andreas zzzzzzzzzz
bernd
carmen ggggggggggg
carmen fffffffffff
detelf

Die NULL-Werte bei Bernd und Detelf hast du unterschlagen...

Wenn ich

$sql = "SELECT a.id, a.name, b.text FROM table1 a LEFT JOIN table2 b ON a.id=b.id GROUP BY b.id ORDER by a.id DESC Limit 20 ";

ausführe kommmt

andreas dddddddddd
carmen ggggggggggg

Was ja schon mal gut ist, doch ich möchte gerne folgendes Ergebnis haben:

andreas dddddddddd
bernd
carmen ggggggggggg
detelf

Warum? Warum genau dddddddddd bei Andreas, warum genau ggggggggggg bei Carmen? In deinem Query machst du keine Vorschriften, genau diese Infos rauszubekommen, und MySQL lässt das leider zu, ohne dir zu verraten (außer in der Doku), dass beim undefinierten Gruppieren von Spalten irgendein zufälliger Wert gewählt wird, der obendrein bei Änderungen in der DB auch noch wechseln könnte. Dass bei dir dort zufällig "der erste" Wert drinsteht, ist nicht garantiert.

Dann: Durch deine Bedingung zum JOIN ist definiert: a.id == b.id. Du gruppierst nach b.id - warum gruppierst du nicht nach a.id? Die ist schließlich gleich.

- Sven Rautenberg