2013-07-01 49 views
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"和`「%跳出」用於顯示連接打開的百分比,並從數據庫反彈。

我已經包含上述<cfquery>標籤下方以下<cfchart>標記,如下所示:

<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),我看不到任何寫在圓圈旁邊的值。

請回答我上面的問題,並讓我知道是否有任何問題,我可以回答。

回答

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> 
+0

真棒人!有效。所以圖表數據項中不需要查詢項。我試圖找出僅適用於每個圖表以及如何將它保存在一個圖表中的方法。 – Tan

+1

沒錯。 'cfchartdata'旨在讓您手動構建圖表。所以只需要一個「價值」和「標籤」。 – Leigh

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)) 

將q uery有點牽扯,因爲它計算的是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))