我有一张桌子
+-------------+--------------------+----------------------+-----------------------------+
| category_id | parent_category_id | category_path | category_name |
+-------------+--------------------+----------------------+-----------------------------+
| 13098 | 0 | 0 | Scooter 100cc+ |
| 13099 | 13098 | 0,13098, | Aprilia |
| 13100 | 13099 | 0,13098,13099, | Atlantic/Arrecife 125 LC 4T |
| 13101 | 13100 | 0,13098,13099,13100, | Fahrwerk |
+-------------+--------------------+----------------------+-----------------------------+
MySQL是否有办法在category_path
字段中构建category_path
作为替代?
所以在category_path
字段的最后一行有
|Scooter 100cc, Aprilia, Atlantic/Arecife 125 LC 4T|
而不是
|0,13098,13099,13100|
答案 0 :(得分:0)
您应该考虑优化数据库并将其规范化,因为将数据存储为逗号分隔数据将在未来引发许多问题。
最好创建一个关联表,并将每个类别的一对多记录存储到该表中。
但是,在目前的情况下,您可以使用find_in_set()
作为
select
c1.category_id,
c1.parent_category_id,
group_concat(c2.category_name) as category_path,
c1.category_name
from category c1
left join category c2 on find_in_set(t2.parent_category_id,c1.category_path)
group by c1.category_id;