Построение графиков данных из mysql

#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-запросов путем преобразования данных в один из следующих форматов:

  1. Конвертируйте таблицу HTML (это помогает соответствовать стандартам доступности) демонстрационно здесь: http://www.highcharts.com/studies/table-parser.htm
  2. Используя 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