Нужна помощь с запросом

akxxiv

Новичок
Приветсвую всех.

Есть таблица программ обучения programms, и таблица programm_times - в которой перечислены возможные дни и время занятий для этих программ. структура programm_times такая:

programm_id - id программы
day - день недели (1-7, 1-пн)
time - время занятия ( H:i:s )

В поле time перечислены возможные времена занятий, с интервалом 30 мин. Например 12:00:00, 12:30:00, 13:00:00, 16:00:00, 16:30:00 ....
При чем как видно время задается не периодом, а списком времен. Т.е. может быть час утром, час вечером... т.е. могут прерываться по нескольку раз на дню, а могут и полный день занимать.

В условиях выборки так же есть список времен, такого же формата.

Надо выбрать список программ, время возможных занятий которых полностью включает в себя времена из условий выборки.

Т.е. если в условиях задано, что надо выбрать все программы у которых занятия проходят в 12:30, 13:00 и в 15:00, то надо выбрать все программы из programms для которых в programm_times обязательно есть и 12:30 и 13:00 и 15:00

Можно это как-то запросом сделать? Если да, то как?

Потому, что сейчас я это делаю на php в цикле исключая несоответствующие условию.
 

akxxiv

Новичок
нет. ты не так меня понял. Там не строка 12:30, 13:00,15:00 там таблица:

programm_id | day | time
---------------------------------------------------
1 | 1 | 12:30:00
1 | 1 | 12:30:00
1 | 1 | 13:00:00
1 | 1 | 16:00:00
1 | 1 | 16:30:00
 

rotoZOOM

ACM maniac
Как то так?
PHP:
SELECT `programm_id`
FROM `table`
WHERE `time` IN ('13:00:00', '14:00:00')
GROUP BY `programm_id`
HAVING COUNT(`programm_id`)=2
 

akxxiv

Новичок
хм. действительно. Интересно. про HAVING COUNT(`programm_id`)=2 я че-то не подумал....
 

dadoc

Новичок
Если приведенный пример данных валидный, то правильнее будет

PHP:
...HAVING COUNT(DISTINCT `time`)=2
 

rotoZOOM

ACM maniac
Да, согласен, даже если пример не валидный, то одно и то же время может быть в разные дни недели.
 
Сверху