我有一个包含如下字段的 MySQL 表:
id name parent
1 Fruit 0
2 Meat 0
3 Orange 1
4 Beef 2
其中parent字段表示上层id。例如Fruit id是1,Orange是其中一个水果所以parent是1。
但是我想做一个高效的 MySQL 查询来获取格式为 parent->children->parent->children 格式的所有记录。我该怎么做?
查询的结果记录应该是这样的:
id name parent
1 Fruit 0
3 Orange 1
2 Meat 0
4 Beef 2
最佳答案
您需要一个 mysql 不支持的递归连接。您唯一可以做的就是确定最大深度级别(我的情况是 1,因为您有 p->c),这样您就可以确定所需的连接数:
最大层级深度=自连接数:
SELECT
p.id as parent_id,
p.name as parent_id,
c1.id as child_id,
c1.name as child_name
FROM
my_table p
LEFT JOIN my_table c1
ON c1.parent = p.id
WHERE
p.parent=0
例如,如果最大深度级别为 3,则需要 3 个自连接:
SELECT
p.id as parent_id,
p.name as parent_id,
c1.id as child_id_1,
c1.name as child_name_1,
c2.id as child_id_2,
c2.name as child_name_2,
c3.id as child_id_3,
c3.name as child_name_3
FROM
my_table p
LEFT JOIN my_table c1
ON c1.parent = p.id
LEFT JOIN my_table c2
ON c2.parent = c1.id
LEFT JOIN my_table c3
ON c3.parent = c2.id
WHERE
p.parent=0
关于MySQL父子一查询选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808784/