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')
&它从Table获得的行只有22K。对于相同的查询如果我使用REGEXP '7|3|12|1|10|13|2'
,它会从同一个表中返回近119K行。但REGEXP使查询变慢。有没有什么方法可以让我的查询更快?
答案 0 :(得分:1)
您的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,)'