Ситуация такая: есть программа и страны, которые эта программа обслуживает. Мне нужно выбрать из этой таблицы все программы (programm_id ), которые покрывают список стран поступивший на входе от пользователя.
Т.е. меня интересует возможность реализации в блоке WERE условия, которое выдавало бы true при полном совпадении перечисленному значению... по аналогии с IN( "...", "...", "..." ) Почему полное? Потому что, если какая то программа не обслуживает какую то страну, то фактически она не подходит.
IN этого не обеспечиват
Ниже представлена таблица в которой представлены 2 программы с programm_id = 2 и 4, и сопоставленные им коды стран.
Спустя 29 минут, 14 секунд (14.03.2012 - 11:29) T1grOK написал(а):
Навскидку могу предложить это:
select * from table where programm_id IN(1,2,3) GROUP BY country_code HAVING COUNT(*)=3
Спустя 14 минут, 3 секунды (14.03.2012 - 11:43) moskitos80 написал(а):
Цитата (T1grOK @ 14.03.2012 - 08:29) |
Навскидку могу предложить это:
|
Увы не работает... к тому же как раз programm_id мы и пытаемся получить, а вы указали его в перечислении, я попробовал его заменить на country_code, но получаем не то что нужно.
Спустя 11 минут, 34 секунды (14.03.2012 - 11:55) glock18 написал(а):
Цитата (moskitos80 @ 14.03.2012 - 08:43) | ||
Увы не работает... к тому же как раз programm_id мы и пытаемся получить, а вы указали его в перечислении, я попробовал его заменить на country_code, но получаем не то что нужно. |
плохо подставили значит должно работать.
у меня первая мысль была о find_in_set, но, пожалуй, предложенный T1grOK даже лучше
Спустя 54 минуты, 21 секунда (14.03.2012 - 12:49) moskitos80 написал(а):
Цитата (T1grOK @ 14.03.2012 - 08:29) |
Навскидку могу предложить это:
|
SELECT
* FROM `table`
WHERE
`country_code` IN('AU','AT','BA','BB','BD')
GROUP BY `programm_id` HAVING COUNT(*) = 5
Работает!
- Признаться я сначала подумал - бред какой то: HAVING COUNT(*) = 5, но (спасибо так же glock18) разобравшись в сути ответа - понял, что имел ввиду T1grOK: в условии HAVING мы собираем только те programm_id, кол-во которых = кол-ву запрошенных в IN() кодов, т.е. мы собираем только те программы, которые покрывают запрошенное кол-во стран!
Сам бы ни в жисть не догадался так построить выражение! - Пол дня сидим втроем головы ломаем, а тут T1grOK - "на вскидку предложил"! - Респект и уважуха - надо же как у тебя мозг выворачивается! Чем ты его тренируешь?
Спустя 17 минут, 47 секунд (14.03.2012 - 13:07) walters написал(а):
moskitos80
как бы это не сложная задача ) когда работаешь этим в каждый день то все на много проще выдается.
как бы это не сложная задача ) когда работаешь этим в каждый день то все на много проще выдается.
Спустя 26 минут, 7 секунд (14.03.2012 - 13:33) T1grOK написал(а):
Цитата (moskitos80 @ 14.03.2012 - 09:49) |
Чем ты его тренируешь? |
Штанга, перекладина, печеньки
Спустя 7 часов, 59 минут, 42 секунды (14.03.2012 - 21:33) moskitos80 написал(а):
Цитата (T1grOK @ 14.03.2012 - 10:33) | ||
Штанга, перекладина, печеньки |
Эх, везёт - у тебя ещё время на штангу и перекладину остаётся.
_____________
Сложное - просто. Простое сложно.