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

时间:2014-11-29 03:05:58

标签: mysql sql recursive-query

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

id  name    short_desc  long_desc   tag_id  parent_id

我写了简单的sql来找到所有1级类别:

 SELECT * FROM category WHERE parent_id =0

然后我编写了一个查询来获取所有2级类别(其中父类别没有父级)

SELECT * FROM category WHERE parent_id IN (SELECT id FROM category WHERE parent_id =0)

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

逻辑上是这样的:

  1. 从类别
  2. 中选择所有内容
  3. 如果parent_id!= 0,则将父项添加为新行
  4. 重复2,直到所有父母都被计算在内。
  5. 结果应如下所示:

    id  name    short_desc  long_desc   tag_id   parent_name  parent_name_2
    

    如果parent_name为null / empty,则parent_name应保持为空。如果字段中有parent_name id,则检查是否存在parent_name_2,如果存在,则填充两列,如果没有,则仅填充parent_name。

    我确实可以选择在jquery或php中编码,我知道该怎么做。但是,我确信我可以从一个好的SQL查询中获取所需的数据。

    非常感谢任何帮助。

    亲切的问候

    尼克

1 个答案:

答案 0 :(得分:2)

这是使用多个外连接的一个选项:

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
相关问题