Получение ежедневно & amp; месячные итоги из MySQL для использования в графике

У меня есть таблица «подписчиков», которую я хочу запросить и показать результаты в виде графика.

Все записи в таблице имеют свое собственное поле «Создано», которое является датой и временем. Я хочу отобразить результаты запросов за заданные периоды времени, например, я хочу отобразить общее количество новых подписчиков для:

  1. Последние 7 дней, всего за день.
  2. Последние 30 дней, всего за день.
  3. Последние 90 дней, всего за день.
  4. Последние 12 месяцев, всего в месяц.

Моя структура данных диаграммы на самом деле не является ключевой в моем вопросе, мне просто нужен именованный массив, ключи — дни (или месяцы), а значения — итоги.

Мой вопрос связан с реальными запросами SQL. Например, для дней, мне нужно было бы выполнить 1 отдельный запрос для каждого дня и получить итоговое значение за каждый день, используя интервал времени данных, или есть (как я подозреваю, что есть) гораздо более эффективный способ сделать это, как очевидно, что я не хочу делать 90 запросов только для 3-месячного графика?

1

Решение

Вы могли бы использовать функцию TIMESTAMPDIFF(), например:

SELECT TIMESTAMPDIFF(DAY, created, NOW()) AS days, COUNT(*) AS num
FROM subscribers
WHERE created > DATE_SUB(NOW(), INTERVAL 3 MONTH)
GROUP BY days
ORDER BY days ASC

Я только что выполнил этот запрос на 2 миллиона записей таблицы, и это быстро.

Если вы хотите разбить дни на 7, 30, 90 и т. Д., Просто сделайте это с помощью PHP.

1

Другие решения

Других решений пока нет …