给出以下数据和表结构:
id name parent_id
================================
1 food NULL
2 snacks 1
3 cakes 2
4 birthdays 3
我想将这些行与所有父类别一起输出。因此,例如,我想生成一个查询来输出数据,如下所示:
id name parent_id parent_1 parent_2 parent_3
===================================================================
1 food NULL NULL NULL NULL
2 snacks 1 1 NULL NULL
3 cakes 2 1 2 NULL
4 birthdays 3 1 2 3
有了这个,我可以很容易地获得给定类别的每个父级别的ID。
我已尝试使用子查询执行此操作但未完全设法使其正确。这就是我的尝试:
SELECT id, name, parent_id, parent_id AS _parent_1,
(SELECT parent_id FROM categories WHERE id = _parent_1) AS _parent_2,
(SELECT parent_id FROM categories WHERE id = _parent_2) AS _parent_3
FROM `categories`
编辑:根据反馈,似乎要以所需格式获取数据有点困难。
至少可以获得给定类别的所有子类别吗?因此,例如对于类别ID 1,它应该输出它下面的三个类别(如果它将包括给定类别本身,则输出四个类别)。
答案 0 :(得分:2)
您可以根据需要多次自行加入表格,以满足最大嵌套深度。这看起来像这样:
SELECT
c.id AS id,
c.name AS name,
parent.id AS parent,
grandparent.id AS grandparent,
greatgrandparent.id AS greatgrandparent
/* add other columns based on max depth of nesting */
FROM categories AS c
LEFT JOIN categories AS parent
ON c.parent_id = parent.id
LEFT JOIN categories AS grandparent
ON parent.parent_id = grandparent.id
LEFT JOIN categories AS greatgrandparent
ON grandparent.parent_id = greatgrandparent.id
/* keep joining based on max depth of nesting */