我有一个基于本教程的类别表:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
表的结构非常简单:
id, lft, rgt
这是查询:
SELECT c . *, (COUNT(DISTINCT(parent.id))) AS level
FROM categories AS parent, categories AS c
WHERE c.lft
BETWEEN parent.lft
AND parent.rgt
GROUP BY c.id
ORDER BY c.lft
如您所见,同一个表格使用了两次。有一个中间条款,它有分组和顺序。
我根本不确定如何优化它。
在使用EXPLAIN时,我得到:
Using index; Using temporary; Using filesort
答案 0 :(得分:0)
我建议您尝试使用closure table-更简单的主意和更易懂的查询的方法。 您将需要一个用于INSERT / UPDATE的触发器,以及一个闭合表,该闭合表保存了父代与其子代/孙代/孙代/孙代之间的所有可能关系。 还包括节点本身(DEPTH = 0)
+-------------+----------+-------+
| ancestor_id | child_id | depth |
+-------------+----------+-------+