mysql - 如何获取所有父母ID
问题描述
我有一个 MySQL 表,其中包含一个类别列表。
category_id name parent_id
--------------------------------------------------
1 beverage NULL
2 Water 1
3 Sparkling Water 2
4 Snacks NULL
5 Chips 4
product_id name category_id
-------------------------------------
1 water001 3
2 Chips001 5
如何通过一个查询获得类别路径?
SELECT name as product_name,category_path FROM product_table
product_name category_path
-------------------------------------
water001 3,2,1
Chips001 5,4
解决方案
我认为你需要一个存储过程。我不认为你可以用一个单一的 SQL 语句来做到这一点。
我不熟悉编写 SQL 过程,但这样的 somtehintg 可能会有所帮助:
CREATE FUNCTION GetPath(startingID INT)
@outputVal VARCHAR(20) OUTPUT
BEGIN
DECLARE x INT;
SELECT category_id INTO x FROM table2 Where product_id = startingID;
SET outputVal = x;
sloop:LOOP
SELECT category_id INTO x FROM table1 WHERE parent_id = x;
IF x IS NOT NULL THEN
SET outputVal = outputVal + "," + x;
ITERATE sloop;
ELSE
LEAVE sloop;
END IF;
END LOOP;
RETURN outputVal;
END $$
请检查正确的拼写!!!
要获得结果,您需要以下内容:
选择获取路径(123);
但要小心:这个解决方案可能会以一个不结束的循环结束,当过程永远找不到“NULL”时!
希望我有帮助!
推荐阅读
- r - 如何计算每个组 R 中级别的后续实例
- json - AWS Glue - Redshift 中具有 Json 结构的字段
- node.js - Amazon Connect CCP 未在 HTML iframe 中显示
- ada - 英特尔芯片上 Apple BigSur 上的 AdaCore 的 GNAT 社区版
- azure-data-factory - 接收器表错误中的 ADF 映射数据 - 接收器表保持为空
- wordpress - WooCommerce 按 SKU 排序 - 获取正确的数字顺序
- javascript - 为什么我的 Rubik 字体呈现为 sans-serif(我知道 Rubik 本质上是 sans-serif 的子代)?
- html - 每个索引级别的 HTML/CSS 表格不同的垂直边距
- javascript - Node.js 在构建时堆内存不足
- javascript - 通过按钮自动复制和粘贴 iframe 加载的数据