Php SQL使用replace()选择相似结果和精确结果

Php SQL使用replace()选择相似结果和精确结果,php,mysql,sql-server,Php,Mysql,Sql Server,对不起,如果标题不是很有描述性,我真的不知道如何简单地用这个词。在我的网站上,我有一个数据库表,里面满是视频游戏和电子竞技团队。当我在URL中显示团队名称时,我会删除其中的所有空白。出于这个原因,我需要在搜索时接受该名称的无空格版本,以防有人尝试键入他们在URL中找到的名称 球队名称示例:洛斯桑托斯国王队 URL示例:mysite.com/teams/LosSantosKings 示例搜索查询#1:“Los San”(不带引号) 搜索结果示例#1:Los Santos Kings 示例搜索查询#

对不起,如果标题不是很有描述性,我真的不知道如何简单地用这个词。在我的网站上,我有一个数据库表,里面满是视频游戏和电子竞技团队。当我在URL中显示团队名称时,我会删除其中的所有空白。出于这个原因,我需要在搜索时接受该名称的无空格版本,以防有人尝试键入他们在URL中找到的名称

球队名称示例:洛斯桑托斯国王队

URL示例:mysite.com/teams/LosSantosKings

示例搜索查询#1:“Los San”(不带引号)

搜索结果示例#1:Los Santos Kings

示例搜索查询#2:“LosSan”(不带引号)

搜索结果示例#1:空-返回0行

如果搜索“Los San”,则返回团队的数据库行。但是,如果搜索“LosSan”,则不会。当我测试SQL的
replace()
函数的精确匹配性时,这种使用SQL的
replace()函数的方法可以很好地工作,但是当设置在LIKE查询旁边时,它在后一个实例中不起作用

我的问题是:

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%{".str_replace(' ', '', $search)."}%' ORDER BY name ASC"

这是一个语法错误,还是我需要以另一种方式对团队名称进行两次单独的查询/检查?

问题不在于你的
比如
。这是花括号。编写
{$search}
是因为在字符串中注入了一个PHP变量。但是对于
str\u replace
来说,您无论如何都在破坏字符串,因此不应该将其括起来

这是您的新品:

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%".str_replace(' ', '', $search)."%' ORDER BY name ASC"

第二个不需要花括号

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%".str_replace(' ', '', $search)."%' ORDER BY name ASC";

“这是一个语法错误吗”,它给了你一个错误吗?不,它给了我一个错误。这就是我在这里问的原因。我所说的语法是指在同一个查询中是否允许使用LIKE和an=语句。只要逻辑正确,您可以将任意多个
LIKE
=
组合使用。但是在您的逻辑中,您正在列名上使用
replace
函数。您在查询时肯定知道列名吗?您熟悉mysql replace()吗?它不会替换列名中的内容,而是替换列值中的内容。我想还是谢谢你吧?你试过了。对不起,我误解了你的问题。我认为你的提问方式没有问题;它会给你你想要的。但是,您确实不需要像“%$search}%”这样的第一个
名称
,因为如果它在
之后传递所有内容,那么它也应该传递第一部分(即,它是多余的)。谢谢!将在允许时选择正确答案。