2

我有一个名为 features 的字段,因为我将值存储为逗号分隔值,现在在选择时我需要获取逗号分隔值的相应名称

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

选择汽车表时如何获取逗号分隔值的对应名称?

4

3 回答 3

2

重新设计您的数据库。

  • 功能- id、名称
  • 车牌号、姓名
  • car_feature - car_id,feature_id

之后,您可以JOIN在查询中使用 a。像这样的东西:

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 教程和文章,例如:

于 2012-08-23T10:46:56.063 回答
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。每个功能取一行,并在您的汽车表中增加一些行。

于 2012-08-23T10:48:35.393 回答
-1
SELECT car FROM table2 WHERE feature_ids LIKE '%3%'
于 2012-08-23T10:46:57.597 回答