一个MySQL查询可能吗? “列包含任何数组的值”

时间:2013-05-14 18:03:20

标签: mysql arrays contains

基本上我想检查一个包含逗号分隔值的mysql文本列是否包含数组中包含的任何值。我知道这可以通过循环和多个查询来完成,但我希望能够进行单个查询。这可能吗?谢谢。

3 个答案:

答案 0 :(得分:4)

我会使用这样的解决方案:

SELECT
  *
FROM
  yourtable
WHERE
  str RLIKE
  CONCAT('[[:<:]]', REPLACE('values,in,the,array', ',', '[[:>:]]|[[:<:]]'), '[[:>:]]')

这将生成以下字符串:

'values,in,the,array'
像这样:

[[:<:]]values[[:>:]]|[[:<:]]in[[:>:]]|[[:<:]]the[[:>:]]|[[:<:]]array[[:>:]]

[[:<:]][[:>:]]是单词边界,因此它只匹配整个单词和|是一个OR,因此它将匹配任何单词。请参阅小提琴here

答案 1 :(得分:1)

SELECT COUNT(*) FROM my_table WHERE (my_column LIKE '%,0,%' OR my_column LIKE '%,1,%');

SELECT COUNT(*) FROM my_table WHERE (my_column REGEXP LIKE '.*,[0-1],.*');

答案 2 :(得分:1)

你的意思是

... WHERE my_column LIKE '%first_array_value%' OR my_column LIKE '%second_array_value%'

由于性能,它会起作用但非常糟糕。还有另一种方式

... WHERE MATCH (my_column) AGAINST ('first_array_value second_array_value')

但最好的办法是尽可能改变数据结构。

相关问题