У меня есть таблица MYSQL с двумя столбцами, отметкой времени и диапазоном. timestamp - это unix-timestamp, а span - целое число.
Я хочу выбрать все строки, где отметка времени находится между текущим временем + - половина интервала.
Например. если текущее время 23:00, то я хочу, чтобы все строки, где отметка времени находилась в диапазоне от 21 до 01. Конечно, проблема в том, что все отметки времени принадлежат разным дням.
ДЛЯ УТОЧНЕНИЯ, меня не волнует дата, только время
Я придумала способ сделать это, но это похоже на взлом. Я уверен, что кто-то с большим знанием MYSQL может показать мне более красивый способ сделать это.
SELECT *
FROM table
WHERE (
TIME( DATE_SUB( CURDATE( ) , INTERVAL( span /2 ) HOUR ) ) <= TIME( DATE_ADD( CURDATE( ) , INTERVAL( span /2 ) HOUR ) )
AND (
TIME( FROM_UNIXTIME( timestamp ) ) >= TIME( DATE_SUB( CURDATE( ) , INTERVAL( span /2 ) HOUR ) )
AND TIME( FROM_UNIXTIME( timestamp ) ) <= TIME( DATE_ADD( CURDATE( ) , INTERVAL( span /2 ) HOUR ) )
)
)
OR (
TIME( DATE_SUB( CURDATE( ) , INTERVAL( span /2 ) HOUR ) ) >= TIME( DATE_ADD( CURDATE( ) , INTERVAL( span /2 ) HOUR ) )
AND (
TIME( FROM_UNIXTIME( timestamp ) ) >= TIME( DATE_SUB( CURDATE( ) , INTERVAL( span /2 ) HOUR ) )
OR TIME( FROM_UNIXTIME( timestamp ) ) <= TIME( DATE_ADD( CURDATE( ) , INTERVAL( span /2 ) HOUR ) )
)
)