Witam,
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;");
if (isset($tablicaA)) {
$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?