MySQL查询字符串包含

时间:2010-04-08 17:51:25

标签: php mysql sql string-comparison

我一直在试图弄清楚如何用MySQL来查询某个列中的值(字符串$haystack)是否包含某些数据(字符串$needle),就像这样:

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

在PHP中,该函数名为substr($haystack, $needle),因此可能:

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

7 个答案:

答案 0 :(得分:376)

实际上非常简单:

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

%是任何角色的通配符。请注意,这可能会在非常大的数据集上变慢,因此如果您的数据库增长,则需要使用全文索引。

答案 1 :(得分:126)

使用:

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

参考:

答案 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)

您可能正在寻找find_in_set功能:

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

此函数的作用类似于PHP中的in_array函数