2010-11-29 71 views
0

进出口试图使菜单与下一结构:相关表与多层次

-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),然后为每个行取下一个 - 类别的id,然后再提升产品节点。但是,随着技术的发展,很多问题(目前35个)。我不知道最好的方法来获得所有的关系,并用PHP来呈现菜单。

感谢

回答

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 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   | 
+-------------+----------------------+---------------+ 
+0

非常感谢! – returnvoid 2010-11-29 20:07:36

0

你可以使用一个leftjoin,然后循环用foreach阵列确保正确的臀部它们,并使用主列备选。索引一个最佳的性能有针对here

问候