354

我一直在试图弄清楚如何使用 MySQL 进行查询,以检查$haystack某个列中的值(字符串)是否包含某些数据(字符串$needle),如下所示:

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

在 PHP 中,该函数被调用substr($haystack, $needle),所以可能:

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

7 回答 7

519

其实很简单:

SELECT *
FROM `table`
WHERE `column` LIKE '%{$needle}%'

%是任何字符集(无、一个或多个)的通配符。请注意,这在非常大的数据集上会变慢,因此如果您的数据库增长,您将需要使用全文索引。

于 2010-04-08T17:56:16.173 回答
178

采用:

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

参考:

于 2010-04-08T17:56:55.907 回答
60
WHERE `column` LIKE '%$needle%'
于 2010-04-08T17:56:14.197 回答
41

我的LOCATE在mysql中使用:

定位(substr,str),定位(substr,str,pos)

此函数是多字节安全的,并且仅当至少一个参数是二进制字符串时才区分大小写。

在你的情况下:

SELECT * FROM `table`
WHERE LOCATE('{$needle}', `column`) > 0
于 2013-02-26T06:47:07.773 回答
13

除了@WoLpH 的答案。

使用LIKE关键字时,您还可以限制字符串匹配的方向。例如:

如果您正在寻找以您的开头的字符串$needle

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

如果您正在寻找以 结尾的字符串$needle

... WHERE column LIKE '%{$needle}'
于 2012-10-16T16:18:54.187 回答
5

请注意,这是危险的:

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

先做:

$needle = mysql_real_escape_string($needle);

因此它将防止可能的攻击。

于 2013-08-27T15:20:25.900 回答
3

您可能正在寻找find_in_set功能:

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

此函数的作用类似于in_arrayPHP 中的函数

于 2013-06-10T11:13:39.300 回答