Как использовать только один запрос для получения данных каждый день в течение одного года?

Я хочу получить данные каждый день в течение одного года назад, но я должен использовать 365 запросов в течение каждого дня как:

for ($i = 0; $i<365; $i++){
    $end_day = ...; // the end time of each day
    $start_day = ...; // the start time of each day
    $query = select count(*)....where created < $end_day AND created > $start_day
}

Я думаю, что мое текущее решение делает систему очень медленной. Там какой-либо путь состоит в том, чтобы просто использовать один запрос только?

5
задан hippietrail 21 November 2012 в 12:41
поделиться

3 ответа

Предполагая, что ваш созданный столбец - это DATETIME или TIMESTAMP, а сохраненные данные более детализированы, чем день:

SELECT COUNT (*) ... GROUP BY YEAR (created), MONTH (created), DAY ( created)

COUNT - это агрегатная функция, которая будет применяться к каждой группе, т. е. у вас будет одна строка на группу, и эта строка будет иметь количество записей в этой группе. Поскольку мы сделали группу в день, это именно те данные, которые вам нужны.

Вы не можете просто группировать по ДНЮ (создан), поскольку ДЕНЬ возвращает день месяца, поэтому нам также нужно указать месяц и год, чтобы убедиться, что дни дискретны.

Вы, вероятно, захотите создать WHERE created> $ start И created <$ finish, чтобы ограничить его некоторым временным интервалом (или WHERE YEAR (created) == 2010).

Ссылки:

MySQL Query GROUP BY day / month / year

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

4
ответ дан 14 December 2019 в 04:35
поделиться

Вы можете использовать условие group by. http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

если у вас есть время в дате, вам придется отформатировать ее, чтобы получить только дату (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format)

select count(*), created from my_table group by created
3
ответ дан 14 December 2019 в 04:35
поделиться

Если это уже столбец времени:

SELECT COUNT(*),DATE(created) as d ..... GROUP BY d;

Если он хранится как временная метка unix:

SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d;

В принципе, вы можете использовать функции Mysql Дата и время, чтобы отформатировать столбец так, чтобы получить из него только дату, а затем сгруппировать по этим датам, чтобы получить подсчет для каждой даты.

1
ответ дан 14 December 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: