PHP MySQL:搜索查询仅适用于现有的完整术语
Posted
技术标签:
【中文标题】PHP MySQL:搜索查询仅适用于现有的完整术语【英文标题】:PHP MySQL: Search query work only with existing full term 【发布时间】:2016-02-15 19:04:47 【问题描述】:我的搜索查询完全有效,但前提是我使用了正确的术语(即“iPhone 6 Plus”,但如果我只搜索“iPhone”,它将不会返回任何内容。
我的搜索查询是:SELECT * FROM products WHERE name LIKE '" . $term . "' OR brand LIKE '" . $term . "' LIMIT 0 , 30"
那么我怎样才能创建一个可以更好地搜索的更好的查询呢?
非常感谢所有可以提供帮助的人。
【问题讨论】:
RTM dev.mysql.com/doc/refman/5.7/en/pattern-matching.html 解决方案相当简单。 所以我必须使用 %$term%? 你知道庞蒂亚克 ;-) vedere Jay 的 rispota ;-) 准备安德里亚。你能详细说明一下吗?你的意思是如果有人输入iphone
而不是iPhone
它会失败?编辑:啊,你删除了你的评论。编辑#2:啊,你来了,哈哈
【参考方案1】:
为了对部分搜索词进行匹配,您必须在查询中添加一些 wildcards,%
:
SELECT * FROM products WHERE name COLLATE UTF8_GENERAL_CI LIKE '%" . $term . "%' OR brand COLLATE UTF8_GENERAL_CI LIKE '%" . $term . "%' LIMIT 0 , 30"
您可以将COLLATE UTF8_GENERAL_CI
添加到您的列定义中,然后您就不必修改您的查询。例如:
ALTER TABLE products MODIFY COLUMN name VARCHAR(...) CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI.
如果你需要更复杂的东西,你会想要查看fulltext searches。
拉丁语排序规则 (LATIN1_GENERAL_CS
) 是众所周知的排序规则之一,可以很好地处理不区分大小写的搜索。如果我指定的那个(我尝试始终使用 UTF-8)不起作用,请替换拉丁排序规则。
【讨论】:
谢谢杰!但是区分大小写,有没有不区分大小写的搜索方法? 啊 - 你之前没有指出。除了更复杂的东西it is all about the collation used 在桌子上@andreaem 查看我的更新。 不工作,即使我使用'iPhone'而不是'iphone'也没有结果 您是否更改了表格?还是查询? 我已经尝试删除并再次导入,没有任何改变...谢谢杰,别担心,暂时就这样吧,我稍后会回到这个以上是关于PHP MySQL:搜索查询仅适用于现有的完整术语的主要内容,如果未能解决你的问题,请参考以下文章