Php SQL使用replace()选择相似结果和精确结果
对不起,如果标题不是很有描述性,我真的不知道如何简单地用这个词。在我的网站上,我有一个数据库表,里面满是视频游戏和电子竞技团队。当我在URL中显示团队名称时,我会删除其中的所有空白。出于这个原因,我需要在搜索时接受该名称的无空格版本,以防有人尝试键入他们在URL中找到的名称 球队名称示例:洛斯桑托斯国王队 URL示例:mysite.com/teams/LosSantosKings 示例搜索查询#1:“Los San”(不带引号) 搜索结果示例#1:Los Santos Kings 示例搜索查询#2:“LosSan”(不带引号) 搜索结果示例#1:空-返回0行 如果搜索“Los San”,则返回团队的数据库行。但是,如果搜索“LosSan”,则不会。当我测试SQL的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 示例搜索查询#
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}%”这样的第一个名称
,因为如果它在或之后传递所有内容,那么它也应该传递第一部分(即,它是多余的)。谢谢!将在允许时选择正确答案。