Mysql 获取给定叶ID的根节点
我得到了以下表格:Mysql 获取给定叶ID的根节点,mysql,sql,select,Mysql,Sql,Select,我得到了以下表格: +-----------------+ | PRODUCTS | +-----------------+ | #product_id | | #company_id | +-----------------+ | | +---------------------+ | PRODUCT_BUNDLES | +---------------------+ | #parent_product_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查询来实现这一点?您可以像这样创建
过程
CREATE PROCEDURE get_root(在id int中)
开始
声明child_id int;
声明prev_id int;
设置prev_id=id;
设置child_id=-1;
将父产品标识选择为子产品标识
来自产品捆绑包,其中子产品标识=上一个标识;
而child_id-1可以
设置上一个id=子id;
设置child_id=-1;
将父产品标识选择为子产品标识
来自产品捆绑包,其中子产品标识=上一个标识;
结束时;
选择子标识;
结束
到目前为止你做了什么?现在我只有相反的问题。从根ID中给出子代的ID<代码>选择bundles.product\u id FROM products\u bundles bom internal JOIN products ON products.product\u id=bom.parent\u product\u id internal JOIN products bundles ON bundles.product\u id=bom.child\u product\u id,其中products.product\u id=SOMEID代码>看看这里的解决方案建议的解决方案就是我现在拥有的,但更简单:)。给定父ID获取子代。我搜索的是一个查询,它返回所有产品id都作为子代给定的父项。也许建议的解决方案是一种很好的方法,但我看不到方法。最后,使用getconsentry
过程获得解决方案
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