Php MySQL-多级类别结构
给定以下数据和表格结构:Php MySQL-多级类别结构,php,mysql,sql,database,hierarchical-data,Php,Mysql,Sql,Database,Hierarchical Data,给定以下数据和表格结构: id name parent_id ================================ 1 food NULL 2 snacks 1 3 cakes 2 4 birthdays 3 我想将这些行与它们的所有父类别一起输出。例如,我想生成一个查询来输出数据,如下所示: id name p
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,它应该输出它下面的三个类别(如果它将包含给定类别本身,则输出四个)。您可以根据需要多次自联接表,以满足最大嵌套深度。这可能是这样的:
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 */
我可以知道parent_1、parent_2、parent_3字段在哪个表中显示吗?@Haji-最好不要管这个@GSTAR MySQL不支持递归,因此选择包括1。创建一个存储过程。2.尽可能频繁地将表连接到自身(因此无需子查询)3。在应用程序级别处理逻辑(例如PHP的位),或4。切换到其他模型(例如嵌套集)。所有这些解决方案都已被广泛采用。请参阅方法,这可能非常有用。;)如果我们有第10个深度,那么它将像这样进入第10个级别????你不认为这需要一个聪明的方法来做吗。