How to query comma delimited field of table to see if number is within the field
如果某列包含特定数字(例如 981),我想从表中选择行。这些列中的数据可以是 0、null 或采用以下格式:
1007,1035,1189,908,977,974,979,973,982,981,1007
我在上面的链接中点了一个赞。我使用 IN ('7','3','12','1','10','13','2')
& 它只从表中获取 22K 行。对于相同的查询,如果我使用 REGEXP '7|3|12|1|10|13|2'
它会从同一个表返回近 119K 行。但 REGEXP 会使查询变慢。有什么方法可以让我的查询更快吗?
最佳答案
您的regexp
值令人困惑。因此,7
匹配 17
和 77
。 in
可以满足您的需求。
首先,我不建议将值存储在逗号分隔的列表中。如果您确实必须这样做(就像不知道如何更好地设计数据库的人一样),请使用 find_in_set()
:
where find_in_set(7, list) > 0 or
find_in_set(3, list) > 0 or
. . .
或者,将分隔符放入 regexp
中。我认为它看起来像:
where concat(',', list, ',') regexp '(,7,)|(,3,)|(,12,)|(,1,)|(,10,)|(,13,)|(,2,)'
关于php - Mysql 中的 REGEP 减慢查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078782/