0

请考虑以下代码,现在我在标签.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。我还有其他查询返回不同的值,这使得整个饼图为 100,但我只包含了两个 cfqueries这个问题的简单性。请让我知道如何进一步进行。

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

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

4

2 回答 2

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>
于 2013-07-02T15:06:34.000 回答
1

我不知道 ColdFusion,但看起来问题是将% Openand% 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))
于 2013-07-01T18:49:12.450 回答