Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询;及;使用多个复选框搜索表单并选择菜单_Mysql_Search_Checkbox - Fatal编程技术网

MySQL查询;及;使用多个复选框搜索表单并选择菜单

MySQL查询;及;使用多个复选框搜索表单并选择菜单,mysql,search,checkbox,Mysql,Search,Checkbox,我有一张桌子: item_id | property_id | value | ================================ 1 | 100 | 1 | 1 | 101 | 1 | 1 | 102 | 0 | 2 | 100 | 1 | 2 | 101 | 1 | 2 |

我有一张桌子:

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  |
...
我想通过带有多个复选框和选择菜单的表单执行“和”搜索(每个复选框和选择菜单的名称类似于“property_id”)

示例:

SELECT item_id
FROM yourtable
WHERE property_id IN (100, 101)
AND value = 1
GROUP BY item_id
HAVING COUNT(DISTINCT property_id) = 2
  • 当我勾选复选框100和101时,查询的期望结果是item_id=1,2
  • 当我选中复选框100、101并从选择菜单120中选择“黑色”时,期望的结果是项目_id=2
  • 当我选中复选框100、101,从选择菜单120中选择“黑色”,并从选择菜单121中选择“大”时,期望的结果是项目_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)

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

    对查询的更改最少:

    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 ;
    

    我不是最好的SQL编写者,但您是否尝试过“WHERE property_id=100101”?这是一个常见的问题,请查看右侧的建议。我记得它来来往往,但肯定还有很多其他的。