Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Liczba postów i tematów danego działu
Forum PHP.pl > Forum > Przedszkole
Lirdoner
Witam, piszę sobie mały skrypt forum i mam problem z pobraniem ilości tematów i postów w danym dziale.
Obecnie moje zapytanie wygląda tak: (na razie pobieram tylko liczbę tematów)
  1. SELECT f . * , COUNT(t.id) AS topics
  2. FROM `'.FORUM_TABLE.'` f
  3. LEFT JOIN '.TOPICS_TABLE.' t ON forum_id = f.id
  4. WHERE section_id = '.$row['id'].'
  5. LIMIT 0 , 30

Zapytanie to ma pobierać wszystkie działy dla danej kategorii (section_id) i wraz z nimi właśnie liczbę tematów.
Niestety przy zastosowaniu COUNT(t.id) baza zwraca mi tylko jeden rekord a działów jest kilka ;/
Co z tym zrobić?
pmir13
Wszelkie funkcje agregujące typu count(), max(), sum() itp działają razem z GROUP BY. Jeśli tego GROUP BY nie ma, mysql uznaje że grupujemy po wszystkich rekordach. Dlatego niezbędne jest dodanie GROUP BY id_dzialu lub innej kolumny, która jednoznacznie taki dział identyfikuje. Należy jednak pamiętać, że używając GROUP BY w SELECT mogą znaleźć się tylko te kolumny, które grupujemy lub agregujemy funkcją. By uzyskać pozostałe należy ponownie dołączyć tą samę tabelę.
thek
Ja może Ci nieco rozszerzę pod kątem optymalizacji temat. W związku z tym, że częstotliwość zmian w takim skrypcie jest niska w porównaniu do odczytów, warto zdenormalizować tabelę. Zwróć uwagę, że pobieranie ilości wszystkich postów i tematów na danym forum czy ilości postów w temacie robi się makabrycznie często, nie warto tego zapytania robić non-stop. Lepiej liczby tę mieć jako dodatkowe pole statystyczne w tabeli. I tak tabela for, zawierała by pole z ilością tematów w danym forum, a tabela tematów dodatkową kolumnę z ilością postów w temacie. W ten sposób odpada Ci dodatkowy join. Możesz iść dalej i w tabeli for od razu mieć liczbę postów dla danego forum, co znów wytnie następny join. Musisz jedynie pamiętać by te liczniki podczas dodawania/usuwania/przenoszenia postów i/lub tematów modyfikować. To jest kwestia przemyślenia dla Ciebie, co da Ci lepszą wydajność i jak mocno chcesz pod tym kątem kombinować.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.