我有一张像
这样的表格id | parent_id
________|_________
'A' | NULL
'B | 'A'
'C' | 'B'
'K' | NULL
'J' | 'K'
'Y' | 'J'
我想以这样一种方式查询MySQL,即每个id都有一个完整的父路径。
像
id | parent_ids
________|_________
'A' | NULL
'B | 'A'
'C' | 'A','B'
'K' | NULL
'J' | 'K'
'Y' | 'J','K'
答案 0 :(得分:0)
不幸的是,MySQL 5没有递归查询。
但是如果你没有很多级别(例如4),你可以使用多个与UNION ALL
连接的查询。我认为它比一个难以理解的硬查询更快更容易理解。
测试数据
create table products(
id varchar(1),
parent_id varchar(1)
);
insert products(id,parent_id)values
('A',NULL),
('B','A'),
('C','B'),
('K',NULL),
('J','K'),
('Y','J');
演示查询
SELECT l1.id,l1.parent_id,NULL parent_ids
FROM products l1
WHERE l1.parent_id IS NULL
UNION ALL
SELECT l2.id,l2.parent_id,l1.id
FROM products l1
JOIN products l2 ON l2.parent_id=l1.id
WHERE l1.parent_id IS NULL
UNION ALL
SELECT l3.id,l3.parent_id,concat(l1.id,',',l2.id)
FROM products l1
JOIN products l2 ON l2.parent_id=l1.id
JOIN products l3 ON l3.parent_id=l2.id
WHERE l1.parent_id IS NULL
UNION ALL
SELECT l3.id,l3.parent_id,concat(l1.id,',',l2.id,',',l3.id)
FROM products l1
JOIN products l2 ON l2.parent_id=l1.id
JOIN products l3 ON l3.parent_id=l2.id
JOIN products l4 ON l4.parent_id=l3.id
WHERE l1.parent_id IS NULL
SQL小提琴 - http://sqlfiddle.com/#!9/0b76f4/16