Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-多级类别结构_Php_Mysql_Sql_Database_Hierarchical Data - Fatal编程技术网

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个级别????你不认为这需要一个聪明的方法来做吗。