2012-04-02 165 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