MySQL Query-使用like运算符时出现问题

时间:2016-06-03 15:05:16

标签: php mysql

我有一个表names,在该表中有一个字段info数据是这样的:

ID    info
1    'alpha,romeo,ciera,delta'
2    'testing,temp,total' 

我正在尝试创建一个选择查询。

select * from names where info like '%$var%'

$var是来自php的数据。

  

问题是我想要完全匹配。如果我使用上面的查询和$ var if   数据为rome,然后它还返回罗密欧行。

又一个例子 -

表格中的数据为testing,temp,total 用户输入数据为test,然后它还会返回testing

我试过

select * from names where info like '$var%' 

select * from names where info like '%$var'

但它并没有像我预期的那样返回数据。

请告知我如何实现这一目标。

注意 - :这是一个我不使用mysql作为折旧的例子。我正在使用mysqli

3 个答案:

答案 0 :(得分:4)

在目标搜索字符串的开头和结尾添加,

然后确保您的源字符串也包含,

<强> SQL Fiddle Demo

select * 
from names 
where  concat( ',', info , ',') like 
       concat( '%,', $var, ',%')

问题是这不会使用任何索引。你应该去FULL TEXT搜索

答案 1 :(得分:2)

在查询中使用,将其用作分隔符,并使用多个条件来考虑&#34;边缘情况&#34;。

SELECT *
FROM names
WHERE
    info LIKE '%,$var,%' OR
    info LIKE '$var,%' OR
    info LIKE '%,$var' OR
    info = '$var'

如果您的行包含info列:

  

α,的罗密欧下,CIERA,δ-
  测试,温度,总
  的罗马
  FOO,测试,酒吧
  柏林,巴黎,马德里,伦敦,的罗马
  威尼斯,米兰,的罗马下,firence
  黑,的克罗姆
  的罗马下,FOME,MOME,科梅,科梅

使用$var作为"rome"的查询将选择:

  

<强>罗马
  柏林,巴黎,马德里,伦敦,的罗马
  威尼斯,米兰,的罗马下,firence
  的罗马下,FOME,MOME,科梅,科梅

但不是:

  

α,的罗密欧下,CIERA,δ-
  黑色, crome

答案 2 :(得分:2)

  

问题是我想要完全匹配。如果我使用上面的查询而在$ var中如果数据是罗马,那么它也会返回罗密欧的行。

请勿使用LIKE运算符,请使用完全匹配运算符=

select * from names where info = '$var'