1

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

0 回答 0