php - 如何获取逗号分隔值对应的记录?

标签 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 = A,B
3    Audi   4,5     // features  = D,E

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

最佳答案

重新设计您的数据库。

  • 功能 - ID、名称
  • 汽车 - ID、名称
  • car_feature - car_id、feature_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 教程和文章,例如:

关于php - 如何获取逗号分隔值对应的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12089858/

相关文章:

php - 如何提交 PHP 表单而不重定向到操作文件? (使用ajax发送和获取数据)

php - 怎么注册成功,把表的一栏内容复制到另一栏?

mysql - 索引列仍然需要 8 秒,不使用索引(mysql 5)

c# - 主键始终插入零

sql - 有关 SQL 查询的帮助

sql-server - 以多对多关系进行更新

django-models - 如何将 'contains' 与 manytomany 字段一起使用?

php - jQuery:通过单击问题切换在 php 中生成的问答列表中答案的可见性

php - 在 MySQL 查询中的 where 子句中传递变量 PHP CodeIgniter

php - 从带有数组的html表插入mysql