php - 如何获取最符合用户搜索条件的记录?

标签 php mysql sql codeigniter optimization

我知道标题不明确,但我想要的是搜索与用户搜索的确切条件匹配的产品,如果该搜索中没有太多记录,所以我想显示其他结果以及用户搜索结果。

例子:假设我有字段

产品名称 价格 类别 子类别 开始日期 结束日期 名称 城市 州 国家/地区

用户可以从以上所有字段进行搜索,但我希望用户搜索应该始终看到至少 12 个结果,无论其他结果是否符合所有条件,这意味着搜索应该从完全匹配搜索扩展到小失败者(或者可能否)匹配标准。

我知道我可以通过多个查询轻松实现这一目标,但重点是我想通过一个或更少的查询实现这一目标。

在这方面的任何帮助将不胜感激。

最佳答案

如果表扫描就可以得到结果,最简单的方法很可能只是按命中数对行进行排名,并显示排名最好的 12 个;

SELECT 
  *,
  CASE WHEN productname='prod#1' THEN 1 ELSE 0 END +
  ...
  CASE WHEN city='city#1'        THEN 1 ELSE 0 END +
  ...
  CASE WHEN country='country'    THEN 1 ELSE 0 END rank
FROM search
ORDER BY rank DESC
LIMIT 12

An SQLfiddle example with just 3 columns implemented .

关于php - 如何获取最符合用户搜索条件的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22524273/

相关文章:

php - Laravel 在 hasMany 关系上覆盖删除方法

php - 停止 PHP 网站中没有 .htaccess 的目录列表

php - 从 PHP Zend 2 中的 POST 请求中解码 JSON 字符串

php - CodeIgniter 中的分页问题

mysql - 按 SQL IN() 子句中值的顺序排序

php - Laravel Eloquent 有很多关系

mysql - 索引超出范围。必须是非负数且小于集合的大小

sql - : "not variable is null" and "variable is not null"?之间有什么区别吗

java - 面向多数据库 Java/hibernate 开发人员的廉价/免费查询工具

mysql - 错误代码 : 1066. 不是唯一的表/别名: 'circle_call_prefixes'