![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 500 Pomógł: 1 Dołączył: 29.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
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)
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ć? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 282 Pomógł: 89 Dołączył: 12.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
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ę.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
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ć.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 16:18 |