gpt4 book ai didi

php - SQL 使用 replace() 选择 LIKE 结果和精确结果

转载 作者:行者123 更新时间:2023-11-29 05:16:18 25 4
gpt4 key购买 nike

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

球队名称示例:Los Santos Kings

URL 示例:mysite.com/teams/LosSantosKings

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

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

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

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

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

这是我的查询:

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

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

最佳答案

您的 LIKE 不是问题所在。这是大括号。当您编写 {$search} 时,这是因为您已将 PHP 变量注入(inject)到字符串中。但是对于 str_replace,您无论如何都会破坏字符串,因此您不应该将其括起来。

这是你的新行:

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

关于php - SQL 使用 replace() 选择 LIKE 结果和精确结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com