To znowu ja

W tym temacie Temat: Many to many SELECT uzyskałem satysfakcjonująca mnie odpowiedź i rozwiązałem problem. Niestety przyszedłem do was dzisiaj z podobnym problem, ale raczej w kwestii czysto merytorycznej, a mianowicie:
- posiadam sobie taki oto wycinek z bazy danych:

Wynika z tego tyle, że dany product może być przypisany do kategorii i/lub podkategorii. Podam przykład:
CODE
- kategoria Pizza:
----- produkt
----- produkt
- kategoria Napoje:
----- produkt
--- podkategoria Drinki:
----- produkt
----- produkt
--- podkategoria Alkohole
----- produkt
----- produkt
----- produkt
- kategoria Napoje:
----- produkt
--- podkategoria Drinki:
----- produkt
----- produkt
--- podkategoria Alkohole
----- produkt
Następnie, po ponownym przejrzeniu tego poradnika: http://nospor.pl/grupowanie-wynikow.html tym razem zastosowałem grupowanie w PHP. Stanąłem na zapytaniu do bazy danych, które wygląda tak:
$sql = "SELECT c.`id_category` cid, IFNULL(c.`master_category`, 0) cmc, c.`name` cname, c.`nr_queue` cq, " . "p.`id_product` pid, p.`name` pname, p.`nr_queue` pq, p.`price_min` ppmin, p.`price_max` ppmax, " . "p.`size_min` psmin, p.`size_max` psmax, p.`size_type` pstype, " . "IF(p.`discount_time` > NOW(), p.`discount`, 0) pdiscount, " . "t.`name` tname, t.`color` tcolor " . "FROM `categories` c " . "LEFT JOIN `products` p ON p.`id_category` = c.`id_category` " . "LEFT JOIN `types` t ON t.`id_type` = p.`id_type` " . "WHERE c.`visible` = '1' AND p.`visible` = '1' " . "ORDER BY cmc, cq, pq, pname";
Cały problem jest w tym, że wynik zwraca tylko kategorie z produktami. "Błąd" znalazłem z klauzuli WHERE - bez niej, wyniki są takie jakie oczekiwałem, czyli zwrot nawet pustych kategorii. Czy ktoś wie dlaczego tak to działa a nie inaczej i gdzie jest błąd w moim rozumowaniu?
Z góry dzięki za jakiekolwiek wskazówki.
PS. kolumna `visible` odpowiada za widoczność kategorii czy produktu na stronie, więc jest potrzebna w zapytaniu.