pobranie listy tematow i ilosci postow w kazdym temacie

0

hej, mam taki problem, ponieważ piszę małe forum. chce pobrać listę tematów z danego forum, a wraz z nia ilosc postow dla każdego tematu z innej tabeli. mam takie dane:

SELECT t.id_tematu, t.id_kategorii, t.link, t.wyswietlenia, count(p.id_postu) FROM f_tematy t RIGHT JOIN f_posty p ON p.`id_tematu` = t.id_tematu WHERE t.id_kategorii = '3'

lecz to nie dziala, bo pobiera tylko jeden temat z danego forum. jak to szybko rozwiazac?

0

A ciekawe co miałoby zrobić skoro masz tutaj agregat (count) a nie masz żadnego grupowania. Ciesz się że w ogóle ci się uruchomiło cokolwiek, bo większość baz danych napisałaby ci że używasz agregatu bez grupowania i odmówiła posluszeństwa.
count() zwraca JEDNĄ wartość, to się nie dziw że w wyniku masz jeden wiersz.
Domyślam się że group by t.id_tematu to minimum...

0

dziękuje. faktycznie pomoglo, jakos wylecialo mi z glowy to GROUP BY :/

ale mam jeszcze jeden problem. mianowicie mam taki podzial: fora -> kategorie -> tematy -> posty

i przy pierwszym rzędzie, czyli forach chcę pobrać ilosc wątków w kategoriach, które są w danych forach, oraz ilość postow w danych kategoriach z calego forum, ale niestety też mi nie idzie :(

mam coś takiego, ale to nie dziala:

SELECT f.*, COUNT(t.id_kategorii) FROM f_forum f RIGHT JOIN f_kategorie k ON k.id_forum = f.id_forum LEFT JOIN f_tematy t ON t.id_kategorii = k.id_kategorii GROUP BY t.id_kategorii ORDER BY f.ord ASC

jak sobie z tym poradzic?

1

Dobrze rozumiem? Chcesz dla każdej kategorii wyświetlić ile jest wątków i ile jest postów? To chyba jednak count() po id_kategorii dobrym pomysłem nie jest, prawda?

0

tzn niezupełnie. układ jest taki

 
- forum główne 1  // tu pobieram ilość tematów, czyli dla tego przypadku, posty z tematów z kategorii 1 i 2
--- kategoria 1
----- temat 1
-------- post do tematu
-------- post do tematu
-------- post do tematu
-------- post do tematu
----- temat 2
-------- post do tematu
-------- post do tematu
-------- post do tematu
-------- post do tematu
--- kategoria 2
----- temat 3
- forum główne 2
--- podkategoria 3
----- temat 4
-------- post do tematu

sprawa wygląda tak, że fora mają osobne tabele, kategorie osobną, tematy osobną, i posty osobną. struktura wygląda tak:

forum
-------------------------
 id_forum    |    nazwa
-------------------------

kategorie
-------------------------------------------------
 id_kategorii    |     id_forum    |    nazwa
-------------------------------------------------

tematy
----------------------------------------------------
 id_tematu    |    id_kategorii      |     tytul
----------------------------------------------------

posty
-----------------------------------------------
 id_postu    |    id_tematu    |    nazwa
-----------------------------------------------
0

Ale ja nadal nie rozumiem co chcesz uzyskać. Namaluj mi ładnie jakiego wyniku się spodziewasz.

0

więc tak, jestem na forum głównym (forum główne 1) i chcę pobrać ilość postów z tematów, które znajdują się w kategorii 1 i kategorii 2, czyli temat 1 - 4 posty, temat 2 - 4 posty i temat 3 - 0 postów, więc dla forum głównego liczba postów w tym przypadku powinna wyjść 8.

0
SELECT f.id_forum, k.id_kategorii, t.id_tematu, COUNT(p.id_postu) FROM forum f LEFT JOIN kategorie k ON f.id_forum=k.id_forum LEFT JOIN tematy t ON t.id_kategorii=k.id_kategorii LEFT JOIN posty p ON p.`id_tematu` = t.id_tematu WHERE k.id_kategorii = '3' GROUP BY 1,2,3 WITH ROLLUP
0

witam ponownie, niestety z tym rollup'em nie działa. nie pokazuje mi takich danych jak bym oczekiwał ;/

dodatkowo, drugi problem jaki się zrodził jest taki, że na powyzszych danych musze pobrac liste tematow w kolejnosci DESC wg ostatneigo posta, czyli tak jak na forum. wie ktos jak to posortowac?

1 użytkowników online, w tym zalogowanych: 0, gości: 1