2012-11-25 5 views
2

У меня есть таблица:MySQL запросы для «И» поиска формы с несколькими флажками и выберите меню

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»).

Пример:

  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)

Я надеюсь, что объясняет, что я пытаюсь сделать. Спасибо заранее!

+0

http://whathaveyoutried.com? –

+0

Я не лучший автор SQL, но вы пробовали «WHERE property_id = 100, 101»? – Matt

+0

Это общий вопрос, посмотрите на предложения справа. Я помню, что он появился в http://stackoverflow.com/questions/12029608/select-query-in-sql и http://stackoverflow.com/questions/12399950/php-sql-way-to-skip-over- раздел-of-a-query-if-variable-is-blank, но, безусловно, есть много других. – LSerni

ответ

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 ; 

 Смежные вопросы

  • Нет связанных вопросов^_^