#php #javascript #mysql #highcharts
#php #javascript #mysql #графики
Вопрос:
У меня есть результат mysql, отсортированный по дате и сгруппированный по дате и идентификатору.
SELECT
DATE(`created_at`) AS `date`,
COUNT(`id`) AS `count`,
`account_id`
FROM `streamaccounts`
GROUP BY `date`, `account_id`
ORDER BY `date`;
И результатом является это:
дата, количество, account_id
2011-03-23, 2, 1
2011-03-23, 1, 6
2011-04-25, 1, 1
2011-04-26, 5, 6
Если вы спросите меня, это правильный набор результатов для его использования для построения графика с высокими диаграммами. Но я столкнулся со следующей проблемой.
Я не могу понять, как создать правильный результат для highcharts. Результат должен выглядеть примерно так:
series: [{name: 'account1', data: [2, 1]}, {name: 'account2', data: [1, 5}]
Все это будет запрограммировано на PHP и echo’d выведет на печать действительный javascript.
Что мне делать? Нужно ли мне сначала перебирать все даты и проверять, является ли в этой дате допустимый результат? Или мне сначала просмотреть все учетные записи и проверить правильность даты.
Есть предложения?
Заранее спасибо!
Ответ №1:
Мне было намного проще заставить Highchart выполнять обработку данных из SQL-запросов путем преобразования данных в один из следующих форматов:
- Конвертируйте таблицу HTML (это помогает соответствовать стандартам доступности) демонстрационно здесь: http://www.highcharts.com/studies/table-parser.htm
- Используя AJAX, прочитайте в файле CSV — демонстрацию здесь:http://www.highcharts.com/studies/data-from-csv.htm
Поскольку ваш запрос уже обрабатывает CSV-файл, просто следуйте примеру для #2.
Ответ №2:
Таким образом, в основном у вас будет ось X, состоящая из дат, а ось Y будет состоять из количества для каждой учетной записи.
Проще всего сгенерировать это по общей оси для данных, в данном случае дат. Следовательно, вам нужно перебирать даты в диапазоне времени, который вы хотите для графика, и сопоставлять количество с этими днями. В итоге получается набор данных, который может выглядеть следующим образом:
series : [
{name: 'ac1', data: [0,1,5,0,0,0,0,2,3]},
{name: 'ac2', data: [0,0,2,1,0,1,0,0,0]}
]
В итоге получается такой пример: http://jsfiddle.net/55dvF/4 /
Надеюсь, это поможет.
Ответ №3:
group by account_id
посчитает все вместе по счету
Обновить:
group by date, account_id
Комментарии:
1. Спасибо за быстрый ответ. По Я знаю, это не то, чего я хочу. Я хочу сгруппировать по дате и получить количество для каждого account_id для этой даты. У учетной записи 1 может быть 5 сообщений в 2011-04-11, а у учетной записи 2 может быть 2 сообщения в тот же день. В этом результате у меня будет 2 линии графика для каждой учетной записи с одной точкой в 5, а другой в 2