Мы радиостанция с сеткой передач, в которой есть время начала и окончания, в определенный день недели, в определенные недели года.У нас есть показы, которые запускаются в ночь с субботы на воскресенье (с 11 вечера по субботу - 1 час по воскресеньям), а также шоу, запланированные на понедельник, вторник, среду.
Мы пытаемся создать запрос к MySQL о том, что показываютнаходится в эфире в определенное время.Наш текущий запрос не способен на такую вещь.
Как мы можем построить запрос или запросы к текущей таблице, предоставляя только время, день недели, неделю года.Нужно ли менять таблицу, чтобы включить в нее больше информации?Спасибо.
Мы попробовали следующую конструкцию таблицы и запрос MySQL.
MySQL:
CREATE TABLE `shows` (
`id` tinyint(4) NOT NULL,
`name` varchar(255) NOT NULL COMMENT 'Program Name',
`starts` time NOT NULL COMMENT 'Starting Time',
`ends` time NOT NULL COMMENT 'Ending Time',
`duration` smallint(6) NOT NULL COMMENT 'Length in seconds',
`days` set('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') NOT NULL COMMENT 'Starting Day of the Week',
`weeks` set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53') DEFAULT NULL COMMENT 'Weeks of the Year',
`active` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Active Program'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
PHP:
$time = date("H:i:s"); // current time
$dow = date("l"); // current Day of Week
$week = date("W");// current week
$query = "SELECT id, name, starts, ends, duration, days, weeks, active
FROM shows WHERE starts < $time AND ends > $time
AND FIND_IN_SET('$dow', days)
AND FIND_IN_SET('$week', weeks)
AND active = '1'";
Пример данных: Шоу начинается в субботу в 23:00 и заканчивается в воскресенье 1 утра
{
"id": "123",
"name": "Overnight Show",
"starts": "23:00:00",
"ends": "01:00:00",
"duration": "7200",
"days": "Saturday",
"weeks": "1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53",
"active": "1"
}
Для данного ввода$ time = 00:12:00, $ dow = воскресенье, $ days = 52 - возвращается пустой набор результатов, потому что шоу начинается в субботу.