Php 如何获取逗号分隔值的相应记录?

Php 如何获取逗号分隔值的相应记录?,php,mysql,many-to-many,Php,Mysql,Many To Many,我有一个名为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的字段,因为我将值存储为逗号分隔的值,现在在选择时,我需要获取逗号分隔值的对应名称

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

如何在选择car表时获得逗号分隔值的对应名称?

重新设计数据库

  • 功能-id、名称
  • 汽车-id,名称
  • 汽车功能-汽车id,功能id
之后,您可以在查询中使用
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教程和文章的所有关键字,例如:

从表2中选择车辆,其中的特征ID为“%3%”

您可以尝试以下方法:

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表中增加一些行。

这将如何返回表1中的名称?这是一个典型的多对多关系