mysql查询,用于在包含组\u concat的表中显示父级和子级

krcsximq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(346)

我们正在构建一个应用程序,客户端要求在每个父级下面用分隔符显示子级。
例如:我有下面两张table

  1. category: category_description:
  2. id(PK) | parent_id id(fk) | name
  3. -------|---------- -------|--------
  4. 1 | 0 1 | Fruits
  5. 2 | 1 2 | Apple
  6. 3 | 1 3 | Orange
  7. 4 | 0 4 | Veggies
  8. 5 | 4 5 | Tomatoes
  9. 6 | 4 6 | Cucumber
  10. and so on ...

结果如下表所示

  1. ID | Name
  2. ---|-----
  3. 1 | Fruits
  4. 2 | Fruits > Apple
  5. 3 | Fruits > Orange
  6. 4 | Veggies
  7. 5 | Veggies > Tomatoes
  8. 6 | Veggies > Cucumber
  9. and so on...

即使客户端随机插入,结果也应该如上所示。
我已尝试执行以下查询

  1. SELECT c.category_id AS category_id, c.parent_id, c.sort_order,
  2. GROUP_CONCAT(cd.name SEPARATOR '  >  ') AS name FROM
  3. category c LEFT JOIN category_description cd ON c.category_id =
  4. cd.category_id LEFT JOIN category_description cd1 ON cd1.category_id =
  5. c.parent_id GROUP BY c.category_id, cd.name

但没有显示预期的结果。请告诉我,我错在哪里。
希望我能解释得更好。提前谢谢

mgdq6dx1

mgdq6dx11#

我不知道你为什么聚集在这里;连接查询应该可以工作,假设只有一个级别的层次结构:

  1. SELECT
  2. c.ID,
  3. CONCAT(CASE WHEN c.parent_id = 0 THEN cd1.name ELSE cd2.name END,
  4. CASE WHEN c.parent_id <> 0 THEN CONCAT(' > ', cd1.name) ELSE '' END) AS Name
  5. FROM category c
  6. LEFT JOIN category_description cd1
  7. ON c.id = cd1.id
  8. LEFT JOIN category_description cd2
  9. ON c.parent_id = cd2.id
  10. ORDER BY
  11. CASE WHEN c.parent_id = 0 THEN c.id ELSE c.parent_id END,
  12. c.parent_id;
  13. ID Name
  14. 1 1 Fruits
  15. 2 2 Fruits > Apple
  16. 3 3 Fruits > Orange
  17. 4 4 Veggies
  18. 5 5 Veggies > Tomatoes
  19. 6 6 Veggies > Cucumber

演示

展开查看全部

相关问题