我使用http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/上的提示构建了一个MySQL树。让我们说我的树看起来像:
Electronics
--Keyboards
--Phones
----HTC DESIRE Z
----HTC ONE X
-------Camera
-------Battety
Food
--Fruits
----Apple
----Watermelon
--Vegetables
----Carrot
----Onion
我可以轻松选择任何类别的整个树或子类别;我的问题是每次浏览类别时我都不需要选择整个树。例如,如果我在HTC One X
,我不需要查看任何Food
个子节点。我总是希望看到当前节点和所有主节点的所有父节点。
另一个例子,如果我在Phones
我希望看到这棵树:
Electronics
--Keyboards
--Phones
----HTC DESIRE Z
----HTC ONE X
Food
现在,我通过选择整个树来解决它并通过CSS隐藏不必要的节点。现在我的树有3k +行,而且很慢。
查询我现在正在使用:
SELECT `node`.`id`,
(COUNT(parent.id)) AS `depth`,
`node`.`title`,
`node`.`link`
FROM `sklep_kategorie` AS `node`
INNER JOIN `sklep_kategorie` AS `parent`
WHERE (node.lft BETWEEN parent.lft AND parent.rgh)
AND (node.visible= 1)
GROUP BY `node`.`id_sklep_kategoria`
ORDER BY `node`.`lft` ASC
感谢您提供任何提示
@edit
我做到了!
我不得不添加一个字段 - parent_id
。有了这个我能够做到这一点:
CREATE TEMPORARY TABLE x AS
SELECT parent.id as parent
FROM `sklep_kategorie` AS `node`
INNER JOIN `sklep_kategorie` AS `parent`
WHERE (node.lft BETWEEN parent.lft AND parent.rgt)
AND (node.id_sklep_kategoria = [ID OF CATEGORY]);
SELECT kat.id_sklep_kategoria, kat.title,kat.link,kat.miniatura
FROM sklep_kategorie kat
LEFT JOIN x
WHERE kat.parent = x.parent
OR kat.parent =0
ORDER BY kat.lft