Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Pobieranie i liczenie rekordów
fire_dept
post 6.09.2010, 12:48:17
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 4.02.2010

Ostrzeżenie: (0%)
-----


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ę.

Ten post edytował fire_dept 6.09.2010, 12:49:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
wiiir
post 6.09.2010, 14:26:37
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


dodaj count-a i grupowanie
Go to the top of the page
+Quote Post
Wezyr
post 6.09.2010, 14:49:17
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 4.09.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Wezyr 6.09.2010, 14:51:50
Go to the top of the page
+Quote Post
fire_dept
post 6.09.2010, 17:26:10
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 4.02.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował fire_dept 7.09.2010, 10:05:32
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:51