我正在研究一个过滤器,用户可以在其中为最终输出选择不同的条件。现在我正在构造SQL查询,但是每当选择更多条件时,它都不起作用。
广告值表的示例。
+----+-----------+---------------+------------+
| id | listingId | value | identifier |
+----+-----------+---------------+------------+
| 1 | 1a | Alaskan Husky | race |
+----+-----------+---------------+------------+
| 2 | 1a | Højt | activity |
+----+-----------+---------------+------------+
| 3 | 1c | Akita | race |
+----+-----------+---------------+------------+
| 4 | 1c | Mellem | activity |
+----+-----------+---------------+------------+
如您所见,每个广告价值都有不同的行。
我期待的结果
假设用户选中/勾选了显示"阿拉斯加哈士奇"的比赛复选框,那么它应该返回比赛的listingId(一次(。如果用户已选择"阿拉斯加雪橇犬"和活动级别为"低",则它应该不返回任何内容,如果活动级别为"Mellem"或"Højt"(中,高(,则它应返回 listingId,其中种族仅为"阿拉斯加雪橇犬",而不是"秋田"。我希望你明白我想要完成什么。
我尝试了这样的东西,什么也没返回。
SELECT * FROM advalues WHERE (identifier="activity" AND value IN("Mellem","Højt")) AND (identifier="race" AND value IN("Alaskan Husky"))
顺便说一下,我也想选择不同的列表 Id,所以它只返回唯一的列表 Id。
我将继续四处寻找解决方案,过去几个小时我一直在这样做,但也想在这里发布,因为我还没有找到任何对我有帮助的东西。谢谢!
您可以针对每种类型将标识符的保留拆分为两个表。然后你加入列表ID以获得具有两种类型的标识符的列表Id。
SELECT ad.listingId
FROM advalues ad
JOIN advalues ad2
ON ad.listingId = ad2.listingId
WHERE ( ad.identifier = 'activity' AND ad.value IN( 'Mellem', 'Højt' ) )
AND ( ad2.identifier = 'race' AND ad2.value IN( 'Alaskan Husky' ) )
这个问题并不完全清楚,但我认为你想要这个:
WHERE (identifier="activity" AND value IN("Mellem","Højt")) OR (identifier="race" AND value IN("Alaskan Husky"))
如果我猜对了,您正在尝试使用不同的"过滤器"获取数据。
您的查询
SELECT listingId FROM advalues
WHERE identifier="activity"
AND value IN("Mellem","Højt")
AND identifier="race"
AND value IN("Alaskan Husky")
将始终返回 0 个结果,因为您要求identifier = "activity" AND identifier = "race"
我想你想做这样的事情:
SELECT listingId FROM advalues
WHERE
(identifier="activity" AND value IN("Mellem","Højt"))
OR
(identifier="race" AND value IN("Alaskan Husky"))