Załóżmy, że mam taki sobie wzór struktury forum.
Tabele:
- kategorie
- sekcja + subsekcja (działy)
- wątki
- posty
Tabela kategorie, składa się z identyfikatora i nazwy.
Tabela sekcja, składa się z identyfikatora, id do rodzica sekcji, id do kategorii i nazwy.
Tabela wątki składa się z id, id do sekcji oraz nazwy.
Tabela posty składa się z identyfikatora, id do wątku i rzecz jasna treści.
Chciałbym sobie stworzyć widok kategorii, który wyświetli mi ilość sekcji (bez subsekcji), wątków i postów dla każdej kategorii.
Czyli:
id | nazwa | sekcje | wątki | posty
1 | kate1 | 3 | 4 | 11
2 | kateg2 | 5 | 2 | 0
3 | kategoria3 | 7 | 4 | 2
SELECT `kat`.`kat_id` AS `id`, `kat`.`nazwa` AS `nazwa`, count(`sek`.`sek_id`) AS `sekcje` count(`wtk`.`wtk_id`) AS `watki`, count(`pst`.`pst_id`) AS `posty` FROM `db`.`t_kategorie` `kat` LEFT JOIN `db`.`t_sekcje` `sek` ON(`sek`.`kategoria` = `kat`.`kat_id`) LEFT JOIN `db`.`t_watki` `wtk` ON(`wtk`.`sekcja` = `sek`.`sek_id`) LEFT JOIN `db`.`t_posty` `pst` ON(`pst`.`watek` = `wtk`.`wat_id`) WHERE `sec`.`rodzic` IS NULL, GROUP BY `cat`.`cat_id`
Jeżeli w tym zapytaniu ograniczyłbym się do policzenia sekcji, to wszystko wygląda dobrze. Jeżeli dodałbym do tego wątki, to też byłoby dobrze, jeżeli nie ma żadnych postów, bo jeżeli te się pojawią, to wynik znowu jest nie taki jaki powinien.
Chciałbym, aby było to wykonane bez podzapytań... Niestety, w ten sposób wychodzą jakieś dziwne wyniki. W jaki sposób policzyć takie coś?