wojto
15.05.2004, 03:45:01
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
15.05.2004, 09:21:20
[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
15.05.2004, 09:39:38
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
15.05.2004, 10:22:07
[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
15.05.2004, 10:45:40
thx, u mnie tez dziala
masz u mnie wirtualne piwo
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.