MySQL查询String包含

我一直想弄清楚如何使用MySQL来查询某个列中的值(string $haystack )是否包含某些数据(string$needle ),如下所示:

 mysql_query(" SELECT * FROM `table` WHERE `column`.contains('{$needle}') "); 

在PHP中,这个函数被称为substr($haystack, $needle) ,所以也许:

 WHERE substr(`column`, '{$needle}')=1 

其实很简单:

 mysql_query(" SELECT * FROM `table` WHERE `column` LIKE '%{$needle}%' "); 

%是任何字符的通配符。 请注意,对于非常大的数据集,这可能会变慢,所以如果数据库增长,则需要使用全文索引。

使用:

 SELECT * FROM `table` WHERE INSTR(`column`, '{$needle}') > 0 

参考:

  • INSTR
 WHERE `column` LIKE '%$needle%' 

我在mysql中使用LOCATE

LOCATE(substr,str),LOCATE(substr,str,pos)

这个函数是多字节安全的,只有当至less有一个参数是二进制string时才是大小写敏感的。

在你的情况下:

 mysql_query(" SELECT * FROM `table` WHERE LOCATE('{$needle}','column') > 0 "); 

除了@WoLpH的回答。

使用LIKE关键字时,也可以限制string匹配的方向。 例如:

如果您正在查找以$needle开头的string:

 ... WHERE column LIKE '{$needle}%' 

如果您正在查找以$needle结尾的string:

 ... WHERE column LIKE '%{$needle}' 

注意这是危险的:

 WHERE `column` LIKE '%{$needle}%' 

先做:

 $needle = mysql_real_escape_string($needle); 

所以它会防止可能的攻击。

您可能正在寻找find_in_set函数:

 Where find_in_set($needle,'column') > 0 

这个函数在PHP中像in_array函数一样