php - 获取类别 > 子类别 > 子子类别的父名称,最多 5 级

标签 php mysql

表格:类别

    -------------------------------------------
    | 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/

相关文章:

java - 如何在 hibernate 中添加键约束?

php - jquery实时更新数据库中的行

mysql - 能否从数据文件中查到mysql版本,需要数据恢复

php - .htaccess 重写规则不影响页面上的 GET

PHP 写入 mysql 后出现反序列化错误,这会截断我的数据

php - 无法通过intl-support安装PHP 5.3.0

mysql - 如何从mysql表中获取最后一个列名?

mysql - MySQL 限制 TIMESTAMP 范围的解决方法?

PHP - SSL 套接字客户端证书

php - 与 MySQL Insert 命令相反