Zliczanie rekordów w kategorii - problem z ułożeniem zapytania

0

Witam,

mam dwie tabele (categories, ads)w których przechowuję odpowiednio nazwy kategorii oraz ogłoszenia.
Struktury tych tabeli wyglądają następująco:
categories - | id | title | parent | (gdzie parent dotyczy sub-kategorii; jest to id kategorii wyższej)
ads - | id | cat_id | name | ... |

Mam problem z ułożeniem zapytania mySQL tak, aby zliczyło mi ono ilość ogłoszeń znajdujących się w danych kategoriach(gdzie parent=0 - czyli tych głównych) i sub-kategoriach. Problem jest w tym że nie wiem jak policzyć te ogłoszenia co są przypisane do sub-kategorii i sub-sub-kategorii:

  • Kategoria (id=1; parent=0)
    • sub-kategoria (id=2; parent=1)
    • sub-kategoria2 (id=3; parent=1)
      • sub-sub-kategoria (id=4; parent=3)

Da się w ogóle zrobić coś takiego w jednym zapytaniu, czy też trzeba kombinować w połączenie z PHP i tworzyć kolejne zapytania?

Z góry dziękuję za jakąkolwiek pomoc bądź wskazówki ;)
Pozdrawiam

0

Żeby połączyć te tabele używam warunku WHERE categories.id = ads.cat_id

0

spróbuj tak:

select c.id, count(a.id) from categories c, advs a where c.id=a.cat_id group by c.id;

napisz czy to działa.

0

Niestety nie działa tak jak opisywałem to w pierwszym poście... I tak sobie myślę, że w jednym zapytaniu to nie da rady tego rozwiązać ;/

0

Znalazłem na innym forum odpowiedź, że w jednym zapytaniu się nie da i że trzeba rekurencyjnie policzyć wpisy dla każdego poziomu i na końcu zsumowac wyniki.

~maszynaz dzięki za próbę pomocy ;)

0

Zakładając dowolną liczbę zagnieżdżeń kategorii nie da się tego zrobić jednym zapytaniem. Robienie tego w kawałkach w PHP będzie mało wydajne. Będziesz potrzebował funkcji na serwerze, która rekurencyjnie zliczy wszystkie sub-gałęzie. Jednak przy dużej ilości ogłoszeń problemem stanie się wydajność Wówczas dobrze byłoby do tabel z kategoriami dodać pole ilosc_ogloszen, które będzie przechowywać zagregowane ilości dla danej kategorii. Agregowanie tego pola można zrobić triggerem.

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