如果任何组合匹配,MySQL 显示结果

标签 mysql sql

假设用户有一个搜索表单,他可以在其中搜索属性。假设他选择:

Location : ABC
Price Range : 1 million - 5 millions
No. of Bedrooms Range : 5 - 12
State : XYZ
County : PQR
Category: MNO

匹配他选择的所有字段以从数据库中产生结果的可能性非常小。所以在 WHERE 条件下使用 AND 在这里似乎无效。我想要的是 -

  1. 如果所有选择都匹配则没有问题显示结果
  2. 如果位置、价格范围、州匹配,则同时显示结果
  3. 如果位置、卧室数量、类别、状态匹配,则也显示结果
  4. 依此类推....如果任何组合匹配则显示结果

最佳答案

如何过滤表以查找与任何搜索词匹配的记录,并按匹配词数量的降序对结果进行排序:

SELECT   *,
         (Location = 'ABC')
       + (Price BETWEEN 1000000 AND 5000000)
       + (Bedrooms BETWEEN 5 AND 12)
       + (State = 'XYZ')
       + (County = 'PQR')
       + (Category = 'MNO')
           AS relevance
FROM     my_table
WHERE    (Location = 'ABC')
      OR (Price BETWEEN 1000000 AND 5000000)
      OR (Bedrooms BETWEEN 5 AND 12)
      OR (State = 'XYZ')
      OR (County = 'PQR')
      OR (Category = 'MNO')
HAVING   relevance >= ?   -- specify the minimum number of matching terms here
ORDER BY relevance DESC
LIMIT    ?                -- specify the maximum number of matching records here

关于如果任何组合匹配,MySQL 显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12862404/

相关文章:

java - 从 Java/SQL 文件中提取 SQL 语句

mysql - 如何根据另一个表的引用输出一列两次并使用不同的值?

mysql - SQL 查询总和乘以 2 倍应该是多少

php - MySQL - 选择出现次数最少的行

MySQL 查询选择唯一时间戳

php - 如何从日期字段中从 MySQL 中减去 12 小时 30 分钟

MySql:在复杂的 if 语句中更改源表

mysql - 从搜索中删除被阻止的用户 mysql

mysql、@variable 和 if 语句

如果变量组合不存在,MySQL 插入表