2012-04-02 238 views
0

好了,這是我處理的數據:MySQL查詢嵌套/子?

 category_child_id category_parent_id 
         1     0 
         2     0 
         3     1 
         4     1 
         5     3 
         6     3 
         7     4 
         8     0 
         9     8 
         10     8 
         11     0 
         12     11 
         13     11 
         14     0 
         15     14 
         16     14 
         17     14 
         18     0 
         19     18 
         20     18 
         21     18 
         0     19 

它基本上類與子類等等等等

如果我

SELECT category_child_id FROM category_xref WHERE category_parent_id = 1 

它返回3 & 4這是正確的。但是,此類別中只有以下類別中沒有產品,所以我實際需要的結果也是5 & 6。然而,這並不總是相同的,所以它需要成爲查詢。

所以基本上我需要運行一個查詢來從表中獲取所有連接(嵌套)類別。我已經嘗試了許多失敗結果的方法,所以任何幫助都會很棒。

+0

您的父母 - 子女關係中有一個循環。如果通過類別樹查詢遞歸,這可能導致無限循環。例如0表示19作爲父項,19表示18作爲父項,18表示0作爲父項 - >循環。 – TRD 2012-04-02 12:15:21

回答

0

如果你使用PostgreSQL,你也可以使用「遞推式」,但MySQL不支持動態,遞歸查詢。你必須用你的訪問語言來做(例如PHP,Java)。
在那裏,您可以迭代您的記錄集並對每個返回的子行執行查詢,直到不再有子行返回。

0

正如TRD所說,SQL的擴展支持自連接的遞歸搜索(Oracle使用'CONNECT BY'),但這不僅在MySQL中不可用,而且它們也不是最有效也最靈活的解決方案。

谷歌爲鄰接表模型 - 我做了,發現this

+0

我發現了一些類似的搜索引擎:http://www.sitepoint.com/hierarchical-data-database-2/,可能會對Paul有所幫助。 – TRD 2012-04-02 13:12:57