【问题标题】:search comma separated values in mysql using php使用php在mysql中搜索逗号分隔值
【发布时间】:2016-05-01 10:01:34
【问题描述】:

我在数据库上运行选择查询时遇到了一点问题。一些数据以逗号分隔值列表的形式保存,例如:

表:example_tbl

| Id | standardid | subjectid  |
| 1  | 1,2,3    |  8,10,3  |
| 2  | 7,6,12   |  18,19,2 |
| 3  | 10,11,12 |  4,3,7   |

还有一个我正在尝试运行的示例:

select * from table where standardid in (7,10) and subjectid in (2,3,4)
select * from table  where FIND_IN_SET(7,10,standardid)  and FIND_IN_SET(2,3,4,subjectid)

提前感谢您告诉我的任何事情。

【问题讨论】:

  • 那么 - 是 standardid 还是 standard
  • 注意,如果表很大,搜索这种类型的表会很慢。逗号分隔的值不会以任何使搜索项目高效的方式编入索引。

标签: php mysql


【解决方案1】:

数据库中的逗号分隔值本质上是有问题且效率低下的,标准化数据库设计要好得多;但如果您检查 FIND_IN_SET() 的语法,它会在集合中查找单个值,而不是与集合中的多个值匹配。

要将其用于多个值,您需要多次使用该函数:

select * from table
 where (FIND_IN_SET(7,standardid)
     OR FIND_IN_SET(10,standardid))
   and (FIND_IN_SET(2,subjectid)
     OR FIND_IN_SET(3,subjectid)
     OR FIND_IN_SET(4,subjectid))

【讨论】:

  • 以动态方式,例如 $a="2,3,4"
  • 您必须将 $a 拆分为单个值的数组,并为该数组中的每个值构建查询
  • 我正在从表单中获取值,先生。
  • 然后你通过迭代 $_POST 中的相关值来构建你的查询......我已经向你展示了查询应该是什么样子......我还建议你规范化你的数据库正确
猜你喜欢
  • 2018-12-08
  • 2013-07-03
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 2019-05-14
相关资源
最近更新 更多