请考虑以下代码,现在我在.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
)我看不到圆圈旁边写的任何值。
如果我有任何问题可以回答,请回答上述问题并告诉我。
答案 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))