Как выбрать несколько значений с помощью and condition?

#php #mysql #database #mysqli

#php #mysql #База данных #mysqli

Вопрос:

У меня есть пример таблицы http://prntscr.com/msqpep Мне нужен пустой результат, когда я делаю

 SELECT * FROM prods 
WHERE prod_id = 3 and (fet_id = 1 and fet_id = 5)
  

но этот код так не работает (fet_id = 1 and fet_id = 5) или (fet_id = 1 and fet_id = 3)
"Where in" — лучший способ, но мне нужно `ГДЕ В (1, 2 и 3)

По умолчанию "WHERE IN" работает как (1 or 2 or 3)

Когда я выбираю fet_id= 1 и fet_id = 3, мне нужны два результата, когда я выбираю fet_id= 1 и fet_id = 5, мне не нужен результат

Комментарии:

1. fet_id = 1 и fet_id = 5) не может работать, потому что это условие никогда не может быть истинным.

Ответ №1:

Вы, вероятно, хотите

 SELECT prod_id FROM prods GROUP by prod_id
HAVING (SUM(fet_id=1)>0
AND SUM(fet_id=5)>0)
OR 
(SUM(fet_id=1)>0
AND SUM(fet_id=3)>0)
  

НАЛИЧИЕ групп фильтров, в которых фильтруются строки.

Ответ №2:

Попробуйте это:

 SELECT p1.id AS id1, p2.id AS id2
FROM `prods` p1 LEFT JOIN `prods` p2 ON p1.`prod_id` =  p2.`prod_id`
WHERE p1.`fet_id` = '1' AND p2.`fet_id` = '3' 
  

Вывод

   id1   id2
  1      3
  

При вводе fet_id=1 amp; fet_id=5

 SELECT p1.id AS id1, p2.id AS id2
FROM `prods` p1 LEFT JOIN `prods` p2 ON p1.`prod_id` =  p2.`prod_id`
WHERE p1.`fet_id` = '1' AND p2.`fet_id` = '5' 
  

Вывод: результата нет

Комментарии:

1. Да, это так. Спасибо

Ответ №3:

И еще одно, если требуется более двух значений

 SELECT res.* FROM (SELECT 3 as total,
(SELECT COUNT(*) FROM `prods` as t1 WHERE t1.`fet_id` = 1 OR  t1.`fet_id` = 2 OR t1.`fet_id` = 5) as current,
t2.*
FROM `prods` as t2 WHERE t2.`fet_id` in (1,2,5)) as res WHERE res.total = res.current