我一直在试图弄清楚如何使用 MySQL 进行查询来检查值(字符串 $haystack )在某一列中包含某些数据(字符串 $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

参考:

WHERE `column` LIKE '%$needle%'

矿使用 LOCATE 在MySQL :

  

LOCATE(SUBSTR,STR),LOCATE(SUBSTR,STR,POS)

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

在你的情况:

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

在除了从@WoLpH答案。

当使用LIKE关键字也有能力限制哪个方向字符串匹配。例如:

如果你正在寻找一个字符串,它与你的$needle启动:

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

如果你正在寻找一个字符串与$needle端:

... 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 功能

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top