【发布时间】:2012-11-25 22:05:06
【问题描述】:
我有一张桌子:
item_id | property_id | value |
================================
1 | 100 | 1 |
1 | 101 | 1 |
1 | 102 | 0 |
2 | 100 | 1 |
2 | 101 | 1 |
2 | 102 | 1 |
2 | 120 | black |
3 | 100 | 1 |
3 | 101 | 0 |
3 | 102 | 1 |
4 | 121 | big |
...
我想通过具有多个复选框和选择菜单的表单执行“AND”搜索(每个复选框和选择菜单的名称类似于“property_id”)。
示例:
- 当我选中复选框 100 和 101 时,查询的期望结果是 item_id = 1, 2。
- 当我选中复选框 100、101 并从选择菜单 120 中选择“黑色”时,期望结果为 item_id = 2。
- 当我选中复选框 100、101,从选择菜单 120 中选择“黑色”,然后从选择菜单 121 中选择“大”时,期望结果为 item_id = NULL。
选中的属性(复选框和选择菜单)的数量可能会有所不同。
我试过了:
SELECT item_id
FROM yourtable
WHERE property_id IN (100, 101)
AND value = 1
GROUP BY item_id
HAVING COUNT(DISTINCT property_id) = 2
但它仅适用于复选框和值 0 或 1。我在使用选择菜单(示例 2.或 3.)实现它时遇到问题。
我希望这能解释我想要做什么。 提前致谢!
【问题讨论】:
-
我不是最好的 SQL 编写者,但你试过“WHERE property_id = 100, 101”吗?
-
这是一个常见问题,看右边的建议。我记得它来自 stackoverflow.com/questions/12029608/select-query-in-sql 和 stackoverflow.com/questions/12399950/… ,但肯定还有很多其他的。