【问题标题】:MySQL query for "AND" search form with multiple checkboxes and select menus带有多个复选框和选择菜单的“AND”搜索表单的 MySQL 查询
【发布时间】: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”)。

示例:

  1. 当我选中复选框 100 和 101 时,查询的期望结果是 item_id = 1, 2。
  2. 当我选中复选框 100、101 并从选择菜单 120 中选择“黑色”时,期望结果为 item_id = 2。
  3. 当我选中复选框 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.)实现它时遇到问题。

我希望这能解释我想要做什么。 提前致谢!

【问题讨论】:

标签: mysql search checkbox


【解决方案1】:

对您的查询进行最少的更改:

SELECT item_id
FROM yourtable
WHERE property_id IN (100, 101)
  AND value = 1
   OR property_id = 120 
  AND value = 'black'
GROUP BY item_id
HAVING COUNT(DISTINCT property_id) = 3 ;

相当于:

SELECT item_id
FROM yourtable
WHERE property_id = 100  AND  value = 1 
   OR property_id = 101  AND  value = 1
   OR property_id = 120  AND  value = 'black'
GROUP BY item_id
HAVING COUNT(DISTINCT property_id) = 3 ;

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 2021-09-01
    • 2013-07-19
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多