我已经使用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