Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z GROUP BY
Forum PHP.pl > Forum > Bazy danych > MySQL
wojto
przypuscmy, ze mam tabele produkty (id, id_kategorii) i kategorie (id, nazwa) oraz zapytanie:
[sql:1:e6c7930c85]SELECT COUNT(*) AS ilosc,k.id,k.nazwa FROM produkty p,kategorie k WHERE p.id_kategorii=k.id GROUP BY k.id ORDER BY k.nazwa[/sql:1:e6c7930c85]
i chce, aby wyswietlilo to nazwy wszystkich kategorii, wraz z iloscia produktow w tych kategoriach, ale problem w tym, ze to zapytanie zrobi to ale tylko dla tych kategorii, z przynajmniej jednym produktem

jak zrobic, aby wyswietlic nazwy takze tych kategorii, ktore nie maja produktow?
Codzi mi o zastosowanie jak najmniejszej ilosci zapytan. Nie chce wyswietlac listy kategorii i dla kazdej kolejne zapytanie generowac o ilosc produktow, moze jest inny sposob, aby wyswietlic te kategorie z 0 produktow.
Moze dodac kolejne zapytanie, pobierajace wszystkie kategorie i pozniej laczace jakos te 2 zapytania.

Z gory dziekuje za odpowiedz.
FastRed
[sql:1:49e74e51b7]SELECT COUNT(*) AS ilosc,k.id,k.nazwa
FROM kategorie k
LEFT JOIN produkty p ON(p.id_kategorii=k.id)
GROUP BY k.id
ORDER BY k.nazwa[/sql:1:49e74e51b7]
Może coś takiego?
wojto
qrcze, nie wiem, jakos mi to nie dziala
troche uproscilem kod w przykladzie do postu i byc moze teraz cos zle robie w skrypcie
w rzeczywistosci mam tabele:
produkt (id, id_podkategorii), podkategoria(id, id_kategorii), kategoria(nazwa)

czyli np. mam strukture
produkty:
1|1
2|1
3|1
4|2
5|4

podkategorie:
1|1
2|1
3|1
4|3

kategorie:
procesory
myszki
pamieci
monitory

i chce, zeby mi w menu wyswietlilo takie cos:

procesory (4)
myszki (0)
pamieci (1)
monitory (0)

korzystam z zapytania (niby przerobione z twojego, ale moze zle):
[sql:1:20c2c71fb1]SELECT COUNT(*) AS ilosc,k.id,k.nazwa FROM ".PREFIX."podkategorie pk,".PREFIX."kategorie k LEFT JOIN ".PREFIX."produkty p ON(p.id_podkategorii=pk.id) WHERE pk.id_kategorii=k.id GROUP BY k.id ORDER BY k.nazwa[/sql:1:20c2c71fb1]

jak usune WHERE warunek po nim, to wyswietla wszystkie kategorie, ale w nawiasach wszedzie jest ta sama liczba i jakas duza

jakby ktos mogl napisac poprawny kod zapytania, to bylbym wdzieczny
FastRed
[sql:1:72d09ca34e]SELECT COUNT(p.id) AS ilosc, k.nazwa
FROM kategorie k
LEFT JOIN podkategorie pk ON(pk.id_kategorii = k.id)
LEFT JOIN produkty p ON(p.id_podkategorii = pk.id)
GROUP BY k.id
ORDER BY k.nazwa[/sql:1:72d09ca34e]
Przetestowałem na localu i działa.
wojto
thx, u mnie tez dziala
masz u mnie wirtualne piwo smile.gif
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.