Autor Zpráva
hexcross
Profil
Zdravím,
mám tabulku s kategoriemy : ID | NAME | PARENT (kategorie do 3-tí úrovně)

Poté produkty které se mohou řadit jen do 3-tí úrovně. Chci udělat pokud kliknu na 1. popř. 2. úrověn že se výpišou všechny produkty z podřazených kategorií.

Tento SQL dotaz mi to umožňuje v druhé a třetí úrovni :
$sql = mysql_query("SELECT * FROM products WHERE category IN(SELECT id FROM category WHERE parent = ".$category.") OR category = ".$category." ORDER by id DESC");
 


Jak ho mohu rozšířit i na první úroveň?

Live demo zde : http://labmag.cz/savetech

Díky.
Tori
Profil
Všechny podřazené kategorie se z takovéhle tabulky dají zjistit např.:
SELECT l3.id, l3.name FROM category l1
LEFT JOIN category l2 ON l1.id = l2.parent OR l1.id = l2.id
LEFT JOIN category l3 ON l2.id = l3.parent OR l2.id = l3.id
WHERE l1.id = $category
Je to napevno napsané pro 1-3 úrovně zanoření.
Koukněte ale např. na starší článek Metody ukládání stromových dat v relačních databázích a související články J.Vrány, to by bylo myslím lepší řešení.
edit: vyhozeno zbytečné "DISTINCT"
Kajman_
Profil *
Možná
SELECT *
FROM   products
WHERE  category = $category
       OR category IN (SELECT id FROM category WHERE parent = $category)
       OR
       category IN
       (SELECT id
        FROM   category
        WHERE  parent IN (SELECT id FROM category WHERE parent = $category))
ORDER  by id DES


Ale vidíte, že to není univerzální do dalších úrovní a nebude to zrovna nejrychlejší operace. Univerzálnější a rychlejší bude traverzování kolem stromu.
hexcross
Profil
Kajman:
Velice ti děkuji funguje to přesně jak jsem potřeboval ;)

Na ten link se kouknu až bude čas..ale myslím že tam zase nebude tisíce produktů takže bych v tom problém momentálně neviděl.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0