繁体   English   中英

MySQL的喜欢查询不拉相似的数据

[英]MySQL LIKE query not pulling similar data

我有一个简单的基于MySQL的搜索脚本,我将仅在下面发布与该问题有关的部分。

$name = 'John Doe';
$query = 'SELECT username FROM members WHERE name LIKE %$name%';

现在的问题是,当我搜索John Doe而不是获得具有该特定名称的用户时,我得到了所有名为JohnDoe用户,有趣的是,它甚至没有将John Doe 。 ..您可以在此之前找到John xxxx

是否有高级MySQL属性来完成此任务?

更改

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = 'SELECT username FROM members WHERE name LIKE "'.%$name%.'"';

要么

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

请注意,更改为

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

不会成功

这是因为单引号字符串不能解释变量。

注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号引起来的字符串中不会扩展。

但是,会使用双引号引起来的字符串

双引号字符串的最重要特征是变量名称将被扩展。 有关详细信息,请参见字符串解析。

更新:由于使用了Memolition,因此对其进行了大量编辑和含义更改:)

更改

$query = 'SELECT username FROM members WHERE name LIKE %$name%';

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

$query = 'SELECT username FROM members WHERE name LIKE "%$name%"';

因为luksch说的双引号将打印$ name而不是$ name变量值

因此它必须是单引号'这样的'%name'

所以'单引号适用于stringsvariables

"双引号仅适用于strings

您需要在用作LIKE比较的字符串周围加上单引号

实际上,由于您将查询用单引号引起来,因此真正要查询的是:

SELECT username FROM members WHERE name LIKE %$name%

文字$name

这样编写查询:

$query = "SELECT username FROM members WHERE name LIKE '%$name%'";

您也可以使用全文本索引(仅MyISAM AFAIR)和MATCH AGAINST子句。 它还将为您提供相似率。 在某些情况下非常有用。 此处的示例: http : //forum.kohanaframework.org/discussion/9182/mysql-full-text-searching-match-against/p1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM