teleman
Новичок
Есть загвоздка.
Таблица с телепрограммой. Поля time(TADETIME), chid(INT), text(CHAR). (соответственно, время начала, ид канала, и собственно название передачи. Около 300 каналов.
Понадобилось сделать выборку для каждого канала текущей передачи, +3 последующих.
Как сделать ума не приложу.
Вариант типа:
SELECT * FROM programm WHERE time > (NOW() - INTERVAL 2 hour) AND time < (NOW() + INTERVAL 2 hour
пришлось отбросить сходу, поскольку продолжительность программы варьируется от 2 минут до 3 часов
вариант:
(SELECT * FROM programm
WHERE time < NOW() AND chid = '".$chid."'
ORDER BY time DESC LIMIT 1)
UNION
(SELECT *FROM programm
WHERE time > NOW() AND chid = '".$chid."'
ORDER BY time ASC LIMIT 3)
ORDER BY time
работает, но, блин он актуален для каждого канала, и делать перебор запросов, считаю неверным решением. Тем более, что запрос сам по себе по времени очень тормозит.
Гуру, посоветуйте в какую сторону рыть, поскольку своих идей пока нет.
Таблица с телепрограммой. Поля time(TADETIME), chid(INT), text(CHAR). (соответственно, время начала, ид канала, и собственно название передачи. Около 300 каналов.
Понадобилось сделать выборку для каждого канала текущей передачи, +3 последующих.
Как сделать ума не приложу.
Вариант типа:
SELECT * FROM programm WHERE time > (NOW() - INTERVAL 2 hour) AND time < (NOW() + INTERVAL 2 hour
пришлось отбросить сходу, поскольку продолжительность программы варьируется от 2 минут до 3 часов
вариант:
(SELECT * FROM programm
WHERE time < NOW() AND chid = '".$chid."'
ORDER BY time DESC LIMIT 1)
UNION
(SELECT *FROM programm
WHERE time > NOW() AND chid = '".$chid."'
ORDER BY time ASC LIMIT 3)
ORDER BY time
работает, но, блин он актуален для каждого канала, и делать перебор запросов, считаю неверным решением. Тем более, что запрос сам по себе по времени очень тормозит.
Гуру, посоветуйте в какую сторону рыть, поскольку своих идей пока нет.