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
函数一样