2010-11-29 99 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

問候