Autor | Zpráva | ||
---|---|---|---|
hexcross Profil |
#1 · Zasláno: 18. 10. 2011, 22:47:21
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 |
#2 · Zasláno: 19. 10. 2011, 00:01:15 · Upravil/a: Tori
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 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 * |
#3 · Zasláno: 19. 10. 2011, 00:03:56
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 |
#4 · Zasláno: 19. 10. 2011, 00:16:06
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. |
||
Časová prodleva: 13 let
|
0