Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Pobieranie i liczenie rekordów
Forum PHP.pl > Forum > Przedszkole
fire_dept
Panowie i Panie natrafiłem na kolejny problem jak narazie jest on dla mnie nie do rozwiązania.

Otóż, posiadam 4 tabele w bazie danych z pobieraniem wyników nie mam problemów niestety z liczeniem konkretnych danych tak.

  1. kategoria
  2. id | nazwa kategorii | visible
  3. 1 akcesoria 1
  4. 2 oświetlenie 1
  5.  
  6. podkategoria
  7. id | id_nazwa_kategorii | name | wisible
  8. 1 1 klamka 1
  9. 1 1 szyba 1
  10. 3 2 żarówka 1
  11.  
  12. podkategoria to product
  13. id_kategorii | id_produkt
  14. 1 1
  15. 2 1
  16.  
  17. produkt
  18. id | cena | nazwa | widocznosc | opis


Tak mniej więcej wygląda baza danych i chodzi mi o np.
Jak ktoś klika akcesoria to jquery uwidacznia podkategorie ale w ten sposób

  1. akcesoria
  2. - klamka
  3. - szyba
  4. oświetlenie
  5. - żąrówka


a chciałbym zapytać jak zmontować zapytanie aby wyświetlało tak z policzeniem ile jest podkategori i produktów w danej podkategorii:

  1. akcesoria (2)
  2. - klamka (30)
  3. - szyba (4)
  4. oświetlenie (1)
  5. - żąrówka (2)


Zapytania nie mam przy sobie ale opiera się na LEFT JOIN niczym więcej. Jeżeli będzie potrzebne podeślę go jak będę w domu. Jeżeli czegoś brakuje to dopiszę.
wiiir
dodaj count-a i grupowanie
Wezyr
Proponuję takie rozwiązanie:
  1. $sql1="SELECT id,nazwa_kategorii,num FROM kategoria LEFT JOIN (SELECT id_nazwa_kategorii,COUNT(id) as num FROM podkategoria WHERE wisible=1 GROUP BY id_nazwa_kategorii) as podkat ON(kategoria.id=podkat.id_nazwa_kategorii) WHERE visible=1";
  2. $r1=mysql_query($sql1);
  3. if(!$r1) echo mysql_error();
  4. while (list($id,$nazwa,$num)=mysql_fetch_row($r1)) {
  5. echo "<br />$nazwa ($num)";
  6. $sql2="SELECT id,name,num FROM podkategoria LEFT JOIN (SELECT id_podkategorii,count(id_podkategorii) as num FROM podkategoria_to_product LEFT JOIN produkt ON(id_produkt=id) WHERE widocznosc=1 GROUP BY id_podkategorii) as prod ON(id=id_podkategorii) WHERE wisible=1 AND id_nazwa_kategorii=$id";
  7. $r2=mysql_query($sql2);
  8. if(!$r2) echo mysql_error();
  9. while (list($id2,$nazwa2,$num2)=mysql_fetch_row($r2)) {
  10. echo "<br />- $nazwa2 ($num2)";
  11. }
  12. }

Bazowałem na nazwach pól i tabel jakie przytoczyłeś. Niestety nie dałem rady zmieścić tego w jednym zapytaniu sql, ale efekt, jak sądzę, jest ten sam.
fire_dept
Super dziękuje za pomoc za godzinkę sprawdzę jak to działa.
I opisze rezultaty smile.gif

=========== EDIT

Nie da rady to zapytanie ponieważ mam po 50.000 rekordów.
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.