Mam taką bazę kategorii:
CREATE TABLE IF NOT EXISTS `multikategorie` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `parent_id` bigint(20) UNSIGNED NOT NULL, `position` bigint(20) UNSIGNED NOT NULL, `left` bigint(20) UNSIGNED NOT NULL, `right` bigint(20) UNSIGNED NOT NULL, `level` bigint(20) UNSIGNED NOT NULL, `title` text COLLATE utf8_unicode_ci, `type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Najniższy poziom zagłębienia jaki mam to level = 12.
Chce zrobić:
- listę kategorii po kliknięciu której zobaczymy WSZYSTKIE produkty mieszczące się w wybranym parencie "w dół".
Czyli jeśli mamy np takie kategorie:
- Samochody
-- Osobowe
--- Skoda
----- Rapid
------- Części
-------- Elektronika
---------- Komputery
----- Octavia
----- SuperB
----- Fabia
--- Opel
--- Peugeot
--- Mazda
I ktoś kliknie np. w samochody - to wyświetlą mu się wszystkie produkty należące do kategorii "SAMOCHODY".
W momencie gdy klikniemy na "RAPID" to wyświetlą się nam produkty należące do kategorii: rapid / części / elektronika / komputery.
Mam taką bazę produktów:
CREATE TABLE IF NOT EXISTS `produkty` ( `bf_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `nazwa` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `kategoria` bigint(20) DEFAULT NULL, `cena` double NOT NULL, UNIQUE KEY `id` (`bf_id`), FULLTEXT KEY `nazwa` (`nazwa`,`dostepnosc`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Próbowałem ten problem rozwiązać w ten sposób:
$tablicaA = $ms->query_select("SELECT a.id, a.title, a.parent_id FROM multikategorie a, (SELECT b.id FROM multikategorie b, (SELECT id FROM multikategorie c WHERE c.id = " .($sqlzap) . ") AS foo WHERE b.parent_id = foo.id OR b.id = foo.id ) AS foo2 WHERE a.parent_id = foo2.id OR a.id = foo2.id GROUP BY a.id;"); $sssss .= " kategoria IN ("; foreach ($tablicaA as $wynA => $warttA) { if ($warttA[parent_id] != "0") { $qwex = 1; $sssss .= " $warttA[id] , "; }}
Co w wyniku zwracało mi zapytanie do wyświetlania produktów:
SELECT * FROM produkty WHERE cent <>'' AND ( kategoria IN ( 325193 , 325412 , 325461 ....... dziesiątki id ......... ) ) ORDER BY nazwa ASC
Wszystko byłoby okey gdyby nie to, że mam podgląd tylko do poziomu "niżej" - a nie od tego w którym się aktualnie znajduje -> "do końca".
I tak np. będąc w kategorii "RAPID" - nie mam produktów, ale już wchodząc do KOMPUTERY mam ich bardzo wiele.
Wie ktoś może jak zmienić powyższe zapytania aby całość była widoczna?