#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