Ilja: Select Max(..) von MySQL 4.1 nach 4.0 portieren

Beitrag lesen

yo,

Ich habe es jetzt mal anhand der MySQL-Docu mittels
GROUP BY und HEAVING versucht.

nun, du bist dabei auf den gemeinen "group by mysql" effekt reingefallen. das ist keine schande, sondern passiert wohl den aller meisten. ursache dafür ist, dass mysql keine fehlermeldung mehr bei falscher verwendung von group by anzeigt, um sich sortierungen zu sparen. die nachteile der falsche verwendung überwiegen aber deutlich den versuch performance zu gewinnen und wurde hier schon mehrfach kritisiert. mal abwarten, wann mysql wieder einen rückzieher macht.

grundsätzlich gilt, dass man über alle spalten auch gruppieren muss, die man in der ausgabe anzeigen will, es sei den es handelt sich um aggregat-funktionen.
warum das so ist, wird anhand deiner beispiele deutlich, weil dann mysql zufällig sich für eines der vielen unterschiedlichen werten innerhalb einer gruppierung entscheiden muss.

was die abfrage mit group by betrifft, so kannst du meiner meinung nach maximal folgende spalten mit in die gruppierung rein nehmen:

GROUP BY nboard_categories.id, nboard_categories.category

und dann über die ausgabe:

SELECT nboard_categories.id, nboard_categories.category, MAX(nboard.created)

mehr kannst du mit einer abfrage wohl ohne unterabfragen nicht rausholen, weil es sonst die gewünschte gruppierung durcheinander bringen würde und bei der ausgabe der oben gennanten gründe nur diese auch wieder angezeigt werden können.

Ilja