mysql操纵结果,替换字符串

时间:2015-04-15 08:48:44

标签: mysql

我有一张桌子

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

1 个答案:

答案 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;