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」のような名前が付いています) を持つフォームで「AND」検索を実行したいと考えています。

例:

  1. チェックボックス 100 と 101 をチェックすると、クエリの目的の結果は item_id = 1, 2 になります。
  2. チェックボックス 100、101 をチェックして、選択メニュー 120 から「黒」を選択すると、望ましい結果は item_id = 2 になります。
  3. チェックボックス 100、101 をチェックし、選択メニュー 120 から 'black' を選択し、選択メニュー 121 から 'big' を選択すると、望ましい結果は 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.)

私がやろうとしていることを説明してくれることを願っています。前もって感謝します!

4

1 に答える 1

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 ;
于 2012-11-25T13:58:16.970 に答える