Nisam testirao da li bi bilo optimalnije razdvojiti sve na vise upita ili da se sve odvija u jednom upitu, pa cu to prepustiti tebi, ako imas volje i zivaca... Meni se nije dalo. :)
Dakle, uradio sam malu perverziju od SQL-a i dobio sam ovaj rezultat:
SELECT sub2.naziv_grupe "Naziv Grupe", sub2.datum_slanja "Datum slanja", sub2.naziv_teme "Naziv teme", sub3.broj_tema "Broj tema u grupi", sub1.broj_poruka "Broj poruka u grupi"
FROM
(
SELECT g.id gid, COUNT(*) broj_poruka
FROM posts, groups g, topics t
WHERE g.id = t.group_id AND t.id = posts.topic_id GROUP BY
g.id
) AS sub1
,
(
SELECT g.id gid, g.name AS naziv_grupe, t.title AS naziv_teme, t.post_date AS datum_slanja
FROM topics t, groups g
WHERE
g.id = t.group_id
AND
t.id =
(SELECT id AS topic_id
FROM topics
WHERE topics.group_id = t.group_id
ORDER BY post_date DESC
LIMIT 1)
) AS sub2
,
(
SELECT group_id, COUNT(*) broj_tema
FROM topics
GROUP BY group_id
) AS sub3
WHERE
sub1.gid = sub2.gid
AND sub3.group_id = sub2.gid
;
+-------------+---------------------+------------+-------------------+---------------------+
| Naziv Grupe | Datum slanja | Naziv teme | Broj tema u grupi | Broj poruka u grupi |
+-------------+---------------------+------------+-------------------+---------------------+
| Grupa 1 | 2005-06-29 02:51:21 | Topic 1 | 1 | 3 |
| Grupa 2 | 2005-06-29 02:51:20 | Topic 2 | 2 | 8 |
| Grupa 3 | 2005-06-29 04:30:58 | Topic 4 | 3 | 5 |
| Grupa 4 | 2005-06-29 04:31:39 | Topic 8 | 4 | 7 |
| Grupa 5 | 2005-06-29 02:51:11 | Topic 11 | 5 | 7 |
+-------------+---------------------+------------+-------------------+---------------------+
5 rows in set (0.02 sec)
Malo sam pokusao source kod uciniti preglednijim, pa sam razdvojio bojama, ali nisam njima nijedan dio posebno naglasavao.
Isprobaj, pa javi da li je to sta tebi treba...
Naravno, pozivam sve poznavaoce SQL-a da pokusaju naci neko optimalnije rjesenje, kako bismo svi naucili nesto korisno. :)
Evo, naknadno sam dodao i SQL file da mozete i vi sebi kreirati potrebne tabele za testiranje.
[Ovu poruku je menjao StRiPy dana 29.06.2005. u 22:08 GMT+1]