使用cfchart标记在单个饼图中显示多个查询的数据

时间:2013-07-01 18:14:55

标签: mysql coldfusion coldfusion-8

请考虑以下代码,现在我在.cfm标记内的<body>页面中有以下代码:

DataSource = xx.xx.x.xx
Name of the database = sgemail
Name of the relevant column = event_vc 

基本上我已经计算了以下查询中打开连接的百分比。

<cfquery datasource = "xx.xx.x.xx" name="qSen">

SELECT (select count(*) 
        FROM sgemail) AS TOTAL_CONNECTIONS,
        (SELECT count(*) 
        FROM sgemail 
        WHERE event_vc = "open") AS OPEN_CONNECTIONS,
        (ROUND((SELECT OPEN_CONNECTIONS / (TOTAL_CONNECTIONS))*100)) AS "% OPEN" ;
</cfquery>


<cfquery datasource = "xx.xx.x.xx" name="qSen">

SELECT (select count(*) from sgemail) AS TOTAL_CONNECTIONS,
(SELECT count(*) from sgemail where event_vc = "BOUNCE") AS BOUNCE_CONNECTIONS,
(ROUND((SELECT BOUNCE_CONNECTIONS / (TOTAL_CONNECTIONS))*100)) AS "% BOUNCE" ;
</cfquery>

基本上"% OPEN"和`“%BOUNCE”用于显示从数据库打开和退回的连接百分比。

我在上面的<cfchart>标记下面添加了以下<cfquery>标记,如下所示:

<cfchart
         format="png"
         scalefrom="0"
         scaleto="1200000"
         pieslicestyle="solid">

         <cfchartseries
          type="pie"
          serieslabel="Website Traffic 2006"
          seriescolor="blue"
          query = "qSengrid"
          valuecolumn="% OPEN"

          itemcolumn=""
          >

    </cfchartseries>
</cfchart>

我的问题:

1)事情是上图只显示一个黄色圆圈。我想在一个图表中显示两个查询检索到的信息。例如 我为%OPEN得到的值是30,而我为%Bounce得到的值是20.我还有其他查询返回不同的值,这使得整个饼图 为了这个问题的简单起见,我只包含了两个cfqueries。请让我知道如何进一步。

2)另外,当我注释掉第二个查询(我得到% Bounce值)时,我可以在饼图的圆圈旁边看到%OPEN的值。但是,当我同时运行时 上面只提到一个<cfchart>的查询(使用valuecolumn = %OPEN)我看不到圆圈旁边写的任何值。

如果我有任何问题可以回答,请回答上述问题并告诉我。

2 个答案:

答案 0 :(得分:2)

(来自评论)

通过重复使用相同的查询名称,您很可能会覆盖以前的结果。另外,这不是<cfchartseries query="...">的工作原理。它接受单个查询,这意味着所有值必须包含在同一查询中。

如果您必须使用单独的查询,请为每个查询指定唯一的名称,并为每个值使用单独的<cfchartdata>标记:

<cfchart format="png">
    <cfchartseries type="pie">
         <cfchartdata item="% Open" value="#qTotalOpen.TotalNumber#">
         <cfchartdata item="% Bounce" value="#qTotalBounced.TotalNumber#">
         ... other values ...
    </cfchartseries>
</cfchart>

答案 1 :(得分:1)

我不知道ColdFusion,但看起来问题是将% Open% Bounce值放到同一个结果集中。基于您的标记示例,我认为您的结果需要看起来像这样(我编写了列名称):

theitem   thevalue
--------- --------
% OPEN          40
% BOUNCE        23

那么<cfcchart>中的标记会是这样的:

<cfchartseries
      type="pie"
      serieslabel="Website Traffic 2006"
      seriescolor="blue"
      query = "qSengrid"
      valuecolumn="thevalue"
      itemcolumn="theitem"
>

如果是这种情况(并且记得我在这里猜测因为还没有其他人发布过答案),那么随附的查询将如下所示:

SELECT
  CONCAT('% ', UPPER(sgemail.event_vc)) AS theitem,
  COUNT(*) / tots.totconn AS thevalue
FROM
  sgemail,
  (SELECT COUNT(*) AS totconn
   FROM sgemail
   WHERE event_vc IN ('open', 'bounce')) tots
WHERE tots.totconn <> 0
  AND sgemail.event_vc IN ('open', 'bounce')
GROUP BY CONCAT('% ', UPPER(sgemail.event_vc))

查询有点涉及,因为它正在计算event_vc值子集的百分比,加上它可以防止除以零错误。如果图表可以采用直接计数并将其转换为百分比,则“仅计数”的查询要简单得多:

SELECT
  CONCAT('% ', UPPER(sgemail.event_vc)) AS theitem,
  COUNT(*) / tots.totconn AS thevalue
FROM sgemail
WHERE sgemail.event_vc IN ('open', 'bounce')
GROUP BY CONCAT('% ', UPPER(sgemail.event_vc))