-1

我正在开发一个过滤器,用户可以在其中为最终输出选择不同的条件。Right now I'm doing the construction of the SQL query, but whenever more conditions are selected, it doesn't work.

advalues表的示例。

+----+-----------+---------------+------------+
| id | listingId | value         | identifier |
+----+-----------+---------------+------------+
| 1  | 1a        | Alaskan Husky | race       |
+----+-----------+---------------+------------+
| 2  | 1a        | Højt          | activity   |
+----+-----------+---------------+------------+
| 3  | 1c        | Akita         | race       |
+----+-----------+---------------+------------+
| 4  | 1c        | Mellem        | activity   |
+----+-----------+---------------+------------+

如您所见,每个广告值都有不同的行。

我期待的结果

假设用户已经选中/勾选了显示“阿拉斯加哈士奇”的比赛的复选框,那么它应该返回匹配的列表 ID(一次)。如果用户同时选择了“阿拉斯加哈士奇”和活动级别为“低”,那么它不应该返回任何内容,如果活动级别是“Mellem”或“Højt”(中、高),那么它应该返回 listId 的位置比赛只有“阿拉斯加哈士奇”,而不是“秋田”。我希望你明白我想要完成什么。

我试过这样的东西,它什么也没返回。

SELECT * FROM advalues WHERE (identifier="activity" AND value IN("Mellem","Højt")) AND (identifier="race" AND value IN("Alaskan Husky"))

顺便说一句,我也想选择不同的listingId,所以它只返回唯一的listingId。

我将继续寻找解决方案,过去几个小时我一直在这样做,但我也想在这里发帖,因为我还没有找到任何对我有帮助的东西。谢谢!

4

3 回答 3

1

您可以将标识符的限制拆分为每种类型的两个表。然后加入listingid 以获得具有两种类型标识符的listingId。

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' ) ) 
于 2018-07-06T15:16:27.900 回答
0

如果我说得对,您正在尝试使用不同的“过滤器”获取数据。

您的查询

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"))
于 2018-07-06T13:37:02.880 回答
0

这个问题并不完全清楚,但我认为你想要这个:

WHERE (identifier="activity" AND value IN("Mellem","Højt")) OR (identifier="race" AND value IN("Alaskan Husky"))
于 2018-07-06T13:35:45.437 回答