SQL使用replace()

时间:2015-08-28 17:40:46

标签: php mysql sql-server

很抱歉,如果标题不是很具描述性,我真的不知道如何简短地说出来。在我的网站上,我有一个充满电子游戏和数据库的数据库表。电子竞技队。当我在URL中显示团队名称时,我会从中删除所有空格。出于这个原因,我需要在搜索时接受名称的无空格版本,以防有人尝试输入他们在URL中找到的名称。

球队名称示例:Los Santos Kings

网址示例:mysite.com/teams/LosSantosKings

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

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

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

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

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

这是我的问题:

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

这是语法错误,还是我需要以另一种方式解决这个问题,可能会对团队名称进行2次单独的查询/检查?

2 个答案:

答案 0 :(得分:2)

您的LIKE不是问题所在。它是大括号。当您编写{$search}时,因为您已将PHP变量注入字符串中。但是对于str_replace你还要破坏字符串,所以你不应该把它括起来。

这是您的新行:

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

答案 1 :(得分:1)

你不需要在第二个上花括号。

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