SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.10.2016 22:40:49

remenikomer
Участник
Зарегистрирован: 28.05.2016
Сообщений: 19

Помогите с интервальными условиями выборки

Данные по времени хранятся в unix.
Нужно сделать выборку по интервалам:
- за вчера,
- за 7 дней (без учета текущего дня),
- за текущий месяц
- за предыдущий месяц
- за год
- за весь срок

Я почти все набросал, но возникли проблемы с годом. Походу там нужно как-то изгаляться... и еще не совсем уверен с правильностью времени, что считать больше и меньше в началах суток... время 00:00:00 к какой дате отнести, к вчерашнему дню или сегодняшнему, грубо говоря. А как проверить  время, например, у функции CURDATE(), не получается, т.е. выводит только дату, без времени.


Код написал:


    // За все время
    default:
        $doact = 'all';
        $where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) < NOW()";
        break;

    // За вчера
    case 'yesterday':
        $where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
                                AND FROM_UNIXTIME( db_stats.date ) < NOW() "
;
        break;

    // За 7 дней
    case 'week':
        $where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > CURDATE() - INTERVAL 8 DAY
                                AND FROM_UNIXTIME( db_stats.date ) < NOW() "
;
        break;

    // За прошлый месяц
    case 'prevmonth':
        $where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 2 MONTH
                                AND FROM_UNIXTIME( db_stats.date ) < LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH "
;
        break;

    // За текущий месяц
    case 'curmonth':
        $where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
                                AND FROM_UNIXTIME( db_stats.date ) < NOW() "
;
        break;

    // За год
    case 'year':
        $where_filter_time = " AND FROM_UNIXTIME( db_stats.date ) > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
                                AND FROM_UNIXTIME( db_stats.date ) < NOW() "
;
        break;
 

Неактивен

 

#2 19.10.2016 08:40:33

klow
Активист
Зарегистрирован: 06.12.2014
Сообщений: 126

Re: Помогите с интервальными условиями выборки

За год:  FROM_UNIXTIME( db_stats.date ) > CURDATE() - INTERVAL 1 YEAR
За текущий год: YEAR(FROM_UNIXTIME( db_stats.date )) = YEAR(CURDATE())

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson