【问题标题】:MYSQL search through cells with comma separated valuesMYSQL 搜索具有逗号分隔值的单元格
【发布时间】:2014-05-13 13:41:37
【问题描述】:

我正在构建一个 AJAX 调用,它将一组变量 (id) 传递给一个函数,然后该函数将查询数据库以返回行,如果此 id 存在于它们的“catid”单元格中。

我知道如何使用数组来使用“IN”MYSQL 命令,但在这种情况下,有多个 id 存储在一个单元格中用于行,用逗号分隔。这存储为 varchar。 有什么方法可以遍历存储在行类别单元格中的各个 id?

这是来自数据库的示例行的屏幕截图。我已经突出显示了行的“catid”单元格。如您所见,一行可以是许多类别的一部分,这些类别 id 用逗号分隔)...

【问题讨论】:

  • 所以该字段存储的是文字字符串?如18,26,32 是您尝试查询的数据库中的字符串。
  • 没错。我不会那样设计数据库,但它不是我的数据库!
  • 如何使用FIND_IN_SET()

标签: php mysql


【解决方案1】:

这是不良数据库设计的标志,您应该首先查看Database Normalization,如果您可以更改结构,请首先使用联结表对其进行规范化,截至目前您可以使用FIND_IN_SET() 找到相应的记录id 在逗号分隔的 ids 列中

SELECT * FROM table 
WHERE  FIND_IN_SET('id1',column) > 0
AND FIND_IN_SET('id2',column) > 0
AND FIND_IN_SET('id3',column) > 0

根据您的意愿更改运算符,我已经展示了 AND 运算符的示例,请注意,您需要使用 FIND_IN_SET 的次数与您需要与列进行比较的数组中的 ID 数量一样多

【讨论】:

  • 我知道这一点,但我没有设计数据库,也无法更改它。我不会这样设计。感谢您的回答
  • @devoncrazylegs 那么您需要使用上述方法,但有时它会降低性能
猜你喜欢
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多