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ß