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:搜索查询仅适用于现有的完整术语的主要内容,如果未能解决你的问题,请参考以下文章

Terraform适用于现有的ARM资源。需要国家吗?

现有 PHP 应用程序需要一个简单的 ORM 或 DBAL

并非所有术语都适用于 ElasticSearch 查询

MySQL FIND_IN_SET OR IN 仅适用于第一个整数?

MySQL 查询或正则表达式仅找到模式 D、E、F

php + mysql - 性能 - 即时自动完成响应