有很多层次的相关表格

时间:2010-11-29 19:47:52

标签: php mysql

我正在尝试使用下一个结构制作菜单:

-category 1
--category 1.1
---category 1.1.1
----product 1
----product 2
----product 3
-category 2
--category 2.1
---category 2.1.1
----product 1
----product 2
----product 3
-category 3
--category 3.1
---category 3.1.1
----product 1

我有像wordpress这样的计划:

relation_category_products表存储来自类别的id和来自产品的id。 问题是什么是使mysql查询拥有所有结构的最佳方法? 我的第一个解决方案是查询父类别(-category),然后为每一行获取下一个--category的id,然后直到提升产品节点。但随着那个tecnique,有很多疑问(目前只有35个)。我不知道什么是更好的方式来获得所有的关系,并用PHP来渲染菜单。

感谢

2 个答案:

答案 0 :(得分:1)

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

您的表格结构应该包含父级字段,例如

表“类别”

id(int)  name            parent(int)
   1     Category 1 
   2     Category 1.1     1
   3     Category 1.1.1   2
   4     Category 2       
   5     Category 2.1     4

然后,您可以在“产品”表格中使用一对多关系将其与某个类别相关联。

如果要直接在类别下检索节点,只需通过“父”字段进行SELECT。

如果要检索整个树,请使用连接查询:

SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.id
LEFT JOIN category AS t3 ON t3.parent = t2.id

这会给你一些类似的东西:

+-------------+----------------------+---------------+
| lev1        | lev2                 | lev3          |
+-------------+----------------------+---------------+
| Category 1  | Category 1.1         | Category 1.1.1|
| Category 2  | Category 2.1         | NULL          |
+-------------+----------------------+---------------+

答案 1 :(得分:0)

您可以使用leftjoin然后使用foreach循环数组,确保正确对其进行预设并使用主列alt。为了获得最佳效果而编制索引,有一个很好的指南here

问候