我创建了一个脚本,该脚本构建了一个包含类别、子类别和子类别的菜单。为了获得这些项目,我使用了3个独立的MySQL查询。如下:
检索主要类别:
SELECT id, name FROM categories WHERE parent_id=0
要检索我使用的每个类别的子类别:
SELECT id, name FROM categories WHERE parent_id=?
在哪里?是父类别的id。然后,我再次为每个子类别运行查询。
如何优化此脚本以使用更少的sql查询?提前谢谢。
尝试此查询-
类别+子类别:
SELECT c1.id, c1.name, c2.id, c2.name FROM categories c1
LEFT JOIN categories c2
ON c2.parent_id = c1.id
WHERE c1.parent_id = 0
类别+子类别+子分类:
SELECT c1.id, c1.name, c2.id, c2.name, c3.id, c3.name FROM categories c1
LEFT JOIN categories c2
ON c2.parent_id = c1.id
LEFT JOIN categories c3
ON c3.parent_id = c2.id
WHERE c1.parent_id = 0
一些数据库服务器具有帮助这些操作的构造。然而,MySQL并不是其中之一。
在数据库中存储层次结构还有其他更有效的方法。要了解完整的故事,请查看这篇文章。它将向您介绍嵌套集。
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
如果您只想查看类别的父类别(结果行数应等于类别/子类别行数),则可选择:
SELECT c1.id, c1.name, c2.id, c2.name
FROM category c1
LEFT JOIN category c2 ON c1.parent_id = c2.id