MySQL: Sortierung nach aktuellster ID bei GROUP BY
Verfasst: 11.04.2007 01:39
Meine Abfrage (falsch, da man nicht group by sortieren kann):
Nun ist das Ergebnis egal wie ich herumteste immer so, dass die attach_id die älteste ist, die vorhanden ist und nicht wie ich es eigentlich möchte die aktuellste.
D.h. die Sortierung "al.attach_id DESC" greift nicht, da GROUP BY (wie auch HAVING) bereits selbst die Reihenfolge bestimmt, die ich zwar nachträglich beeinflussen kann, aber die dann nichts mehr enthält, was mich ans Ziel bringt.
Derzeit behelfe ich mich mit einer 2. Abfrage pro Forum, die nur die aktuellste attach_id liefert, aber das kann es ja nicht sein:
Ich weiß, dass es eine Lösung mit zwei verschachtelten Abfragen geben muss, die ich aber im Moment nicht herausfinde.
Weiterhin ist mir klar, dass ein Ergebnis aus GROUP BY nicht mehr nachträglich zu sortieren ist. Man muss bereits vorher die Reihenfolge festlegen. Vielleicht geht auch ein INNER JOIN, aber wie gesagt probiere ich rum, finde aber nicht den Richtigen heraus.
Übrigens geht MAX() im SELECT nicht, da dieser die Filterung aus WHERE nicht berücksichtigt und mir die höchste attach_id liefert, die die forum_id enthalten kann. Die Filterung des WHERE schließt aber bereits einige attach_ids aus, deshalb ist die MAX(attach_id) in der Regel falsch. Würde MAX() die WHERE Klauseln mit berücksichtigen wäre die Lösung leicht gewesen
Gruß
Code: Alles auswählen
SELECT f.forum_id, f.forum_name, COUNT(al.attach_id) AS count, ad.*
FROM phpbb_topics t, phpbb_forums f, phpbb_posts p, phpbb_att_links al, phpbb_att_desc ad
WHERE t.forum_id = f.forum_id
AND p.post_id = al.post_id
AND al.attach_id = ad.attach_id
AND t.topic_id = p.topic_id
AND t.topic_sub_type = 12
AND t.forum_id IN(1, 2)
GROUP BY f.forum_id
ORDER BY f.forum_name ASC, al.attach_id DESC
D.h. die Sortierung "al.attach_id DESC" greift nicht, da GROUP BY (wie auch HAVING) bereits selbst die Reihenfolge bestimmt, die ich zwar nachträglich beeinflussen kann, aber die dann nichts mehr enthält, was mich ans Ziel bringt.
Derzeit behelfe ich mich mit einer 2. Abfrage pro Forum, die nur die aktuellste attach_id liefert, aber das kann es ja nicht sein:
Code: Alles auswählen
SELECT ad.*
FROM phpbb_topics t, phpbb_posts p, phpbb_att_links al, phpbb_att_desc ad
WHERE t.forum_id = 1
AND t.topic_id = p.topic_id
AND t.topic_sub_type = 12
AND p.post_id = al.post_id
AND al.attach_id = ad.attach_id
ORDER BY p.post_id DESC
LIMIT 1
Weiterhin ist mir klar, dass ein Ergebnis aus GROUP BY nicht mehr nachträglich zu sortieren ist. Man muss bereits vorher die Reihenfolge festlegen. Vielleicht geht auch ein INNER JOIN, aber wie gesagt probiere ich rum, finde aber nicht den Richtigen heraus.
Übrigens geht MAX() im SELECT nicht, da dieser die Filterung aus WHERE nicht berücksichtigt und mir die höchste attach_id liefert, die die forum_id enthalten kann. Die Filterung des WHERE schließt aber bereits einige attach_ids aus, deshalb ist die MAX(attach_id) in der Regel falsch. Würde MAX() die WHERE Klauseln mit berücksichtigen wäre die Lösung leicht gewesen

Gruß