我有字段称为功能,因为我将值存储为逗号分隔值,现在选择时我需要获取逗号分隔值的相应名称
table1- feature
id feature_names
1 A
2 B
3 C
4 D
5 E
table2- car
id car feature_ids
1 Zen 2,3,4 // features = B,C,D
2 Benz 1,2 // features = A,B
3 Audi 4,5 // features = D,E
如何在选择购物车时获取逗号分隔值的相应名称?
答案 0 :(得分:2)
重新设计您的数据库。
之后,您可以在查询中使用JOIN
。像这样:
SELECT car.*, feature.name FROM car
JOIN car_feature ON car_feature.car_id = car.id
JOIN feature ON feature.id = car_feature.feature_id
您不应在关系数据库中使用这样的逗号分隔字段。当然不是,如果你想根据该字段编写查询。即使它似乎有效,它也会很快变得极其低效且无法维护。
您的方案称为表之间的多对多关系 - 汽车可以具有任何功能,并且功能可以属于任何汽车。我概述的技术称为交叉引用表。我已经为您提供了所有关键字,以搜索正确的MySQL教程和文章,例如:
答案 1 :(得分:1)
您可以尝试以下方法:
select
a.id,
a.car,
group_concat(b.feature_names) as Features
from
car a
join feature b
on b.id in (cast(b.feature_ids as char));
话虽如此,您确实不应该在数据库中使用CSV。每个功能占一行,并在 car 表中添加一些额外的行。
答案 2 :(得分:-1)
SELECT car FROM table2 WHERE feature_ids LIKE '%3%'