我一直在试图弄清楚如何用MySQL来查询某个列中的值(字符串$haystack
)是否包含某些数据(字符串$needle
),就像这样:
mysql_query("
SELECT *
FROM `table`
WHERE `column`.contains('{$needle}')
");
在PHP中,该函数名为substr($haystack, $needle)
,因此可能:
WHERE substr(`column`, '{$needle}')=1
答案 0 :(得分:376)
实际上非常简单:
mysql_query("
SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'
");
%
是任何角色的通配符。请注意,这可能会在非常大的数据集上变慢,因此如果您的数据库增长,则需要使用全文索引。
答案 1 :(得分:126)
答案 2 :(得分:46)
WHERE `column` LIKE '%$needle%'
答案 3 :(得分:21)
我在mysql中使用LOCATE
:
LOCATE(substr,str),LOCATE(substr,str,pos)
此函数是多字节安全的,并且仅当至少一个参数是二进制字符串时才区分大小写。
在你的情况下:
mysql_query("
SELECT * FROM `table`
WHERE LOCATE('{$needle}','column') > 0
");
答案 4 :(得分:10)
除了@WoLpH的回答。
使用LIKE
关键字时,您还可以限制字符串匹配的方向。例如:
如果您要查找以$needle
开头的字符串:
... WHERE column LIKE '{$needle}%'
如果您要查找以$needle
结尾的字符串:
... WHERE column LIKE '%{$needle}'
答案 5 :(得分:3)
请注意这很危险:
WHERE `column` LIKE '%{$needle}%'
先做:
$needle = mysql_real_escape_string($needle);
因此它可以防止可能的攻击。</ p>
答案 6 :(得分:0)