假设用户有一个搜索表单,他可以在其中搜索属性。假设他选择:
Location : ABC Price Range : 1 million - 5 millions No. of Bedrooms Range : 5 - 12 State : XYZ County : PQR Category: MNO
匹配他选择的所有字段以从数据库中产生结果的可能性非常小。所以在 WHERE
条件下使用 AND
在这里似乎无效。我想要的是 -
- 如果所有选择都匹配则没有问题显示结果
- 如果位置、价格范围、州匹配,则同时显示结果
- 如果位置、卧室数量、类别、状态匹配,则也显示结果
- 依此类推....如果任何组合匹配则显示结果
最佳答案
如何过滤表以查找与任何搜索词匹配的记录,并按匹配词数量的降序对结果进行排序:
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/