Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
Mysql SQL-显示递归关系中的所有父级_Mysql_Sql_Recursive Query - Fatal编程技术网

Mysql SQL-显示递归关系中的所有父级

Mysql SQL-显示递归关系中的所有父级,mysql,sql,recursive-query,Mysql,Sql,Recursive Query,我有一张分类表。这具有递归关系,因此一个类别可以成为另一个类别的子类别。该表如下所示: id name short_desc long_desc tag_id parent_id id name short_desc long_desc tag_id parent_name parent_name_2 我编写了simple以使sql查找所有级别1类别: SELECT * FROM category WHERE parent_id =0 然后,我编写了一

我有一张分类表。这具有递归关系,因此一个类别可以成为另一个类别的子类别。该表如下所示:

id  name    short_desc  long_desc   tag_id  parent_id
id  name    short_desc  long_desc   tag_id   parent_name  parent_name_2
我编写了simple以使sql查找所有级别1类别:

 SELECT * FROM category WHERE parent_id =0
然后,我编写了一个查询来获取所有级别2类别(其中父类别没有父类别)

我想做的是生成一个列,其中显示所有类别数据和任何相关父类别

逻辑上是这样的:

  • 从类别中选择全部
  • 如果父项id!=0,将父级添加为新行
  • 重复2次,直到所有的父母都被考虑在内 结果应该如下所示:

    id  name    short_desc  long_desc   tag_id  parent_id
    
    id  name    short_desc  long_desc   tag_id   parent_name  parent_name_2
    
    如果父\u名称为null/空,则父\u名称应保持为空。如果字段中有父\u名称id,则检查是否有父\u名称\u 2,如果有,则填充两列,如果没有,则仅填充父\u名称

    我可以选择用jquery或php编写代码,我有一个好主意。但是,我确信我可以从一个好的SQL查询中获得所需的数据

    任何帮助都将不胜感激

    问候


    Nick

    这里有一个使用多个外部联接的选项:

    select c.*, 
      case when c2.id is not null then c2.name end parent_name,
      case when c3.id is not null then c3.name end parent_name_2
    from category c
      left join category c2 on c.parent_id = c2.id
      left join category c3 on c2.parent_id = c3.id
    

    如果知道潜在级别的数量,可以使用多个外部自联接。如果未知,则需要使用动态sql。有几个例子都是这样的……最多只能有3个级别。父母,孩子,孙子,都是这样!谢谢你的链接,以前从未见过,但是非常非常有用!再次感谢:)