gpt4 book ai didi

MYSQL 多参数搜索

转载 作者:行者123 更新时间:2023-11-29 14:30:54 26 4
gpt4 key购买 nike

我在 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这一行为具有超过1个属性的项目返回多个值,删除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 中进行计数。谢谢或者你的帮助。如果您遇到麻烦,您可能需要阅读此文 question

最佳答案

添加两个左连接,这将创建一列 attr.val 为“floor”,另一列 attr.val 为“city”,并检查至少一列不为空。

类似这样的事情:

SELECT 
item.*
FROM
item
JOIN
attr_xref ON attr_xref.item = item.id
LEFT JOIN
attr a_city ON a_city.id = attr_xref.attrID
AND a_city.name = 'city'
AND a_city.val LIKE '%new york%'
LEFT JOIN
attr a_floor ON a_floor.id = attr_xref.attrID
AND a_floor.name = 'floor'
AND a_floor.val = 6
WHERE
a_city.id IS NOT NULL
OR a_floor.id IS NOT NULL

我没有测试它,但与此类似的一些方法可能适合您。

关于MYSQL 多参数搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com