2014-09-10 43 views
0

获取根节点我得到了以下表格:对于给定叶子的ID

+-----------------+ 
    | PRODUCTS  | 
    +-----------------+ 
    | #product_id  | 
    | #company_id  | 
    +-----------------+ 
     |  | 
+---------------------+ 
| PRODUCT_BUNDLES  | 
+---------------------+ 
| #parent_product_id | 
| #child_product_id | 
| #company_id   | 
+---------------------+ 

这里是在像PRODUCT_BUNDLES表ID之间的关系,对一些产品的树结果:

 p1 
    / \ 
     p2 p3 
     /| \ 
     p4 p5 p6 

用户给我下面的id p2,p4,p5和p6(树的叶子),我想返回p1 id(树的根)。

如何在mysql中构建select查询来做到这一点?

+0

你有什么迄今所做? – Mikpa 2014-09-10 11:13:07

+0

现在我只有反查询。从根ID给出后代的ID。 'SELECT bundles.product_id FROM products_bundles BOM INNER JOIN产品产品 ON products.product_id = bom.parent_product_id INNER JOIN产品束 ON bundles.product_id = bom.child_product_id WHERE products.product_id = SOMEID;' – mcanaves 2014-09-10 11:33:53

+0

看一看在这里的解决方案http://stackoverflow.com/questions/16513418/how-to-do-the-recursive-select-query-in-mysql – Mikpa 2014-09-10 11:42:54

回答

0

您可以创建PROCEDUREthis one

CREATE PROCEDURE get_root(IN id int) 
    BEGIN 
    DECLARE child_id int; 
    DECLARE prev_id int; 
    SET prev_id = id; 
    SET child_id= -1 ; 
    SELECT parent_product_id into child_id 
    FROM PRODUCT_BUNDLES WHERE child_product_id= prev_id ; 
    WHILE child_id <> -1 DO 
    SET prev_id = child_id; 
    SET child_id= -1 ; 
    SELECT parent_product_id into child_id 
    FROM PRODUCT_BUNDLES WHERE child_product_id = prev_id ; 
    END WHILE; 
    SELECT child_id ; 
    END