У меня есть таблица «подписчиков», которую я хочу запросить и показать результаты в виде графика.
Все записи в таблице имеют свое собственное поле «Создано», которое является датой и временем. Я хочу отобразить результаты запросов за заданные периоды времени, например, я хочу отобразить общее количество новых подписчиков для:
Моя структура данных диаграммы на самом деле не является ключевой в моем вопросе, мне просто нужен именованный массив, ключи — дни (или месяцы), а значения — итоги.
Мой вопрос связан с реальными запросами SQL. Например, для дней, мне нужно было бы выполнить 1 отдельный запрос для каждого дня и получить итоговое значение за каждый день, используя интервал времени данных, или есть (как я подозреваю, что есть) гораздо более эффективный способ сделать это, как очевидно, что я не хочу делать 90 запросов только для 3-месячного графика?
Вы могли бы использовать функцию 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.
Других решений пока нет …