[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка по временному промежутку
arbuzmaster
Подскажите пожалуйста как сделать выборку из DB строк, которые находятся вне промежутка времени, который начинается например сегодня в 22:00 и закончится завтра в 08:00

SELECT * FROM `variants` WHERE CURTIME() NOT BETWEEN `block_from` AND `block_to`

в таком виде работает, но только с 22:00 до 23:59 текущего дня, если указать в `block_to` 00:00, то не срабатывает. Может есть другое решение задачи - в общем цель блокировать выборку строк например с 22:00 сегодня до 08:00 завтра, или вообще например на какой-то интервал времени. Попробовал сделать так

SELECT * FROM `variants` WHERE CURTIME() NOT BETWEEN `block_from` AND `block_from`+ INTERVAL `interval_block` HOUR

в block_from по умолчанию - 23:59:59(если указать по умолчанию 00:00:00 и интервал 0, то не выводит ничего), вроде работает, но я сомневаюсь в правильности данного запроса!

Пока сделал так

SELECT * FROM `variants` WHERE CURTIME() NOT BETWEEN `block_from` AND `block_from`+ `interval_block`

`block_from` - 22:00:00 а `interval_block` - 10:00:00, вроде срабатывает все как нужно, но все же хочется указывать не интервал а конечное время, может есть какой способ?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
walerus
arbuzmaster
Цитата
в общем цель блокировать выборку строк например с 22:00 сегодня до 08:00 завтра, или вообще например на какой-то интервал времени

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

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
walerus
Я не пойму в чем затруднение? время в базе UNIXTIME ? или в каком формате?, прикрепи кусок базы к посту и дай свое условие выборки, что бы понять что ты в результате хочешь, будем "курить"...
arbuzmaster
user posted image
Вот кусок из БД, нужно сделать так, что бы как например в первой строке - в промежуток с 10:00 до 17:00 строка не попадала в выборку, если я делаю так

SELECT * FROM `variants` WHERE CURTIME() NOT BETWEEN `block_from` AND `block_from`+ `interval_block`

то это срабатывает, но если поставить в interval_block значение превышающее 24 часа, в сумме block_from+interval_block, то в результате получается время которого не существует !
Например block_from 22:00:00 interval_block 10:00:00 в итоге дадут не - 08:00:00 а 32:00:00.
Прочитал, что есть такие штуки как SEC_TO_TIME() TIME_TO_SEC() MOD(s,86400) как их сюда прилепить сейчас соображаю, но пока получается плохо.Может я вообще не в том направлении действую, может это как то по другому делается?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
SerginhoLD
я не уверен, но типа того

SELECT 
*,
TIME_TO_SEC(`block_from`) i1,
TIME_TO_SEC(`block_from` + `interval_block`) i2,
TIME_TO_SEC(CURTIME()) ct
FROM `variants`
HAVING
ct NOT BETWEEN i1 AND i2
AND (IF(
i2 > 86400, # 24 часа
ct NOT BETWEEN 0 AND (i2 - 86400),
1
));


_____________
"internet explorer всех правильней отображает страницы" ©
arbuzmaster
SerginhoLD Спасибо, вроде работает правильно!

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.