Как использовать тип области cfchart для отображения комментариев за период времени

Я пытаюсь создать диаграмму с областями с помощью cfchart, но не знаю, как это сделать. Я делаю запрос всех комментариев в таблице и хочу показать период времени (дни или месяцы по оси x) и вывести количество комментариев по мере их создания. Вот запрос комментария:

<cfquery name="qGetComments" datasource="#session.datasource#">
SELECT PersonFirstName
       , PersonLastName
       , PersonZip
       , CommentCode
       , refTopicID
       , tbComment.CommentID
       , tbComment.CreateDateTime
FROM tbPerson 
JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
</cfquery>

Отсюда я не уверен, какие значения нужно поместить в cfchart для вывода диаграммы с областями так, как я хочу. Что-то вроде этого?

<cfchart chartWidth="400" show3D="yes"> 
    <cfchartseries type="area" query="qGetComments" 
       valueColumn="CommentID" 
       itemColumn="CreateDateTime" /> 
</cfchart> 

person user1431633    schedule 03.11.2013    source источник
comment
(Правка) показать комментарии за период времени Тогда вам нужен агрегированный запрос. В частности, тот, который включает count(...) и группирует по выбранному вами интервалу дат (по дням, месяцам и так далее). Это будет включать функции даты, которые часто зависят от базы данных. Итак, 1) какой интервал дат? 2) Какая у вас СУБД и версия?   -  person Leigh    schedule 03.11.2013
comment
Вы также можете рассмотреть возможность использования собственной библиотеки ZingChart вместо cfchart. Я обнаружил, что использовать родную библиотеку часто проще, чем использовать cfchart в ColdFusion 10. На веб-сайте ZingChart есть «построитель диаграмм», который позволяет создавать JSON для определенного типа диаграммы с определенным типом форматирования. Вы можете взять этот JSON и использовать его в качестве основы для того, что вам нужно делать.   -  person Scott Stroz    schedule 03.11.2013
comment
Привет, @leigh, я использую SQL Server. Группировка по дням была бы идеальной. Спасибо за помощь!   -  person user1431633    schedule 04.11.2013
comment
Какая версия, 2005, 2008,..? Хотя существуют стандарты, синтаксис также зависит от версии (поэтому всегда полезно включать оба тега вопроса).   -  person Leigh    schedule 04.11.2013
comment
@Ли извини за этот 2012 год.   -  person user1431633    schedule 04.11.2013


Ответы (1)


Простой способ сгруппировать записи по дате в Server 2008+ выше — преобразовать столбец datetime в столбец date. Затем просто используйте столбец "CommentDate" в качестве элемента диаграммы и "NumOfComments" в качестве значения:

SELECT CONVERT(DATE, tbComment.CreateDateTime) AS CommentDate
      , COUNT(*) NumOfComments
FROM  tbPerson INNER JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID
GROUP BY CONVERT(DATE, tbComment.CreateDateTime); 


Вы можете сделать метки диаграммы более удобными для пользователя, отформатировав дату в SQL (см. транслировать и конвертировать). Просто не забудьте упорядочить результаты по значению date, а не по форматированной строке. В противном случае метки диаграммы могут отображаться не в правильном хронологическом порядке (это распространенная ошибка):

--- format as:  Mon dd, yyyy
SELECT CONVERT(VARCHAR, tbComment.CreateDateTime, 107) AS CommentDateString
      , COUNT(*) NumOfComments 
FROM  tbPerson INNER JOIN tbComment ON tbPerson.PersonID = tbComment.PersonID 
GROUP BY CONVERT(VARCHAR, tbComment.CreateDateTime, 107) 
ORDER BY CONVERT(DATE, CONVERT(VARCHAR, tbComment.CreateDateTime, 107), 107)

SQLFiddle

Кроме того, если диаграммы HTML являются вариантом, вы можете изучить предложение Скотта. Как правило, CFChart подходит для простых случаев, но как только вы начнете настраивать внешний вид (что всегда происходит), обычно лучше использовать базовые инструменты напрямую.

person Leigh    schedule 04.11.2013