Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenie kategorii z produktami w tym wybór pustych
Forum PHP.pl > Forum > Bazy danych > MySQL
Salvation
Witam.
To znowu ja smile.gif
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

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:
  1. $sql = "SELECT c.`id_category` cid, IFNULL(c.`master_category`, 0) cmc, c.`name` cname, c.`nr_queue` cq, "
  2. . "p.`id_product` pid, p.`name` pname, p.`nr_queue` pq, p.`price_min` ppmin, p.`price_max` ppmax, "
  3. . "p.`size_min` psmin, p.`size_max` psmax, p.`size_type` pstype, "
  4. . "IF(p.`discount_time` > NOW(), p.`discount`, 0) pdiscount, "
  5. . "t.`name` tname, t.`color` tcolor "
  6. . "FROM `categories` c "
  7. . "LEFT JOIN `products` p ON p.`id_category` = c.`id_category` "
  8. . "LEFT JOIN `types` t ON t.`id_type` = p.`id_type` "
  9. . "WHERE c.`visible` = '1' AND p.`visible` = '1' "
  10. . "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.
nospor
No skoro ustawiles dla productu
AND p.`visible` = '1'
no to skoro produkt nie istnieje to logiczne ze nie ma =1 wiec warunek nie jest spelniony
powinno byc
AND (p.visible is NULL or p.`visible` = '1' )
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.