表格:类别
-------------------------------------------
| id | cat_name_en | parent_id |
-------------------------------------------
| 1 | level 1 | 0 |
| 2 | level 2 | 1 |
| 3 | Level 3 | 2 |
| 4 | Level 4 | 3 |
| 5 | level 5 | 4 |
| 6 | test | 1 |
这里我需要将名称获取为
level 5 > level 4 > level 3 > level 2 > level 1
在我的查询中我只得到最多 2 个名字
SELECT category,cat_id FROM ( SELECT CONCAT(p.cat_name_en, ' > ', c.cat_name_en) AS 'category',c.id as cat_id FROM categories c LEFT JOIN categories p ON c.parent_id = p.id ) s where cat_id = 5
最佳答案
由于您的类别最多有 5 级,因此您可以添加 LEFT JOIN
每个级别根据需要形成层次结构,
SELECT t1.id as cat_id,
CONCAT_WS(' > ', t1.cat_name_en, t2.cat_name_en, t3.cat_name_en, t4.cat_name_en, t5.cat_name_en)
FROM categories AS t1
LEFT JOIN categories AS t2 ON t2.id = t1.parent_id
LEFT JOIN categories AS t3 ON t3.id = t2.parent_id
LEFT JOIN categories AS t4 ON t4.id = t3.parent_id
LEFT JOIN categories AS t5 ON t5.id = t4.parent_id
WHERE t1.id = 5;
CONCAT_WS
不会连接NULL
值。
关于php - 获取类别 > 子类别 > 子子类别的父名称,最多 5 级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297478/