我在 MySQL 中运行多参数搜索查询时遇到问题:
SELECT item.* from item, attr, attr_xref
WHERE attr_xref.item = item.id
AND attr.id = attr_xref.attrID
AND (
(attr.name = 'city' AND attr.val LIKE '%new york%')
OR
(attr.name = 'floor' AND attr.val = 6)
)
查询是用php动态生成的,没有问题。
问题是这个查询不会返回严格的搜索。它将返回城市或楼层等于其搜索值的项目。
如我所见,问题出在AND attr.id = attr_xref.attrID
此行为具有多个属性的项目返回多个值,删除OR
运算符我将尝试将单个属性与多个不同的名称和值匹配,但具有一个 ID。
有什么办法可以克服这个吗?
这是一个原始示例,在运行时我可能有超过 2,3 个搜索参数。
谢谢,期待您的帮助!
编辑: 通过使用已接受答案中发布的 SQL 查询使其工作,并添加了以下内容:
AND (a_city.id IS NOT NULL
OR a_floor.id IS NOT NULL)
GROUP BY imobil.id
HAVING COUNT(*) = 2
您想对结果进行分组然后对其进行计数,'= 2' 表示已传递了多少个参数,这将在 PHP 中计算。谢谢或您的帮助。如果您遇到问题,您可能想阅读此问题