Я хочу получить данные каждый день в течение одного года назад, но я должен использовать 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
}
Я думаю, что мое текущее решение делает систему очень медленной. Там какой-либо путь состоит в том, чтобы просто использовать один запрос только?
Предполагая, что ваш созданный столбец - это 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
Вы можете использовать условие 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
Если это уже столбец времени:
SELECT COUNT(*),DATE(created) as d ..... GROUP BY d;
Если он хранится как временная метка unix:
SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d;
В принципе, вы можете использовать функции Mysql Дата и время, чтобы отформатировать столбец так, чтобы получить из него только дату, а затем сгруппировать по этим датам, чтобы получить подсчет для каждой даты.