可能与一个MySQL查询? “列包含任何数组的值的”(Possible with one MyS

2019-09-03 04:32发布

基本上我想要查询一个MySQL文本列,其中包含逗号分隔的值是否包含任何包含在数组中的值的。 我知道这可以用一个环和多个查询来实现,但我希望为单个查询。 这可能吗? 谢谢。

Answer 1:

我会用这样的解决方案:

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

这将使以下字符串:

'values,in,the,array'

像这样:

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

[[:<:]][[:>:]]字界限所以它将匹配全字,和| 是的左右,它会匹配任何的话。 请参阅小提琴这里 。



Answer 2:

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],.*');



Answer 3:

你的意思是

... 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')

但最好的方法是,如果可能改变的数据结构。



文章来源: Possible with one MySQL query? “column contains any of the array's values”