【发布时间】:2016-08-10 21:38:04
【问题描述】:
我有一个包含不同项目信息的数据库(3 列)。 “itemname”列(即被搜索的列)的值包含特殊字符,使用户很难找到他们要查找的内容。
格式:“Bayonet / Marble Fade (Factory New)”
现在用户必须输入准确的结构,包括“/”和“(”和“)”。我希望忽略这些字符,因此“Bayonet Marble”将给出与“Bayonet / Marble”相同的结果。
我的(工作)查询:
"SELECT itemname, itemprice, itemupdate FROM pricedata WHERE itemname LIKE '%" . $search . "%' ORDER BY itemprice DESC LIMIT 20");
我发现忽略 / 的无效解决方案。
"SELECT itemname, itemprice, itemupdate FROM pricedata WHERE replace(itemname, ' / ', ' ') LIKE '%" . $search . "%' ORDER BY itemprice DESC LIMIT 20");
不应永久更改值。仅用于查询。
正确的方法是什么?我做错了什么?
非常感谢! :)
【问题讨论】:
-
嘿,托马斯!我看到您正在寻求改进数据库搜索,以便它们对拼写差异不那么敏感。虽然我无法回答这个问题,但我可以建议您简化文本:如果您更简洁,SQL 专家更有可能阅读并帮助您解决问题。 (例如,您可能可以去掉前两段,然后说“我正在尝试构建一个可搜索的项目数据库。名称很复杂,因此用户很难找到他们要查找的内容。”更简单,相同数量的上下文。)欢迎使用 Stack Overflow:祝项目好运!
-
你好迪伦,谢谢你的好话。我试图尽可能缩短它。我希望有人能帮助我。 :)
-
更清晰!很高兴能帮上忙。
-
你是。祝你有个愉快的夜晚!
-
您是否考虑过使用全文索引而不是
LIKE?因为即使您替换了所有特殊字符,用户仍然必须获得正确数量的空格。而且查询会很慢,因为它不能使用索引。
标签: php mysql database replace character