2012-02-03 47 views
0

我有這個疑問使用MySQL查詢結果來創建FusionCharts的圖表

SELECT DISTINCT (sl.smsstatus), sl.sms_prefix, sum(sl.parts) AS sum 
FROM sms_log sl, sms_transaction st 
WHERE 
     st.user_id = 552 
    AND st.customer_id = 1 
    AND st.sendtime >= 1328050800 
    AND st.sendtime <= 1328309999 
    AND st.sms_trans_id = sl.trans_id 
GROUP BY sl.sms_prefix 

結果如下:

smsstatus | sms_prefix | sum 
----------+------------+----- 
rejected | 963  | 2 
received | 971  | 2 

我想根據國字頭和號碼顯示在融合圖這一結果的短信。

這是我的代碼來獲取結果並顯示在圖表上,但它有一個問題,它只顯示第一行,$ total值出現錯誤= 3。

我需要顯示在圖表上(在XAxis「sms_prefix」上,值是'sum'的數量)。

感謝和問候,

$res_smsstat_status = $oSMSStatHandlerCnf->get_stat_country($_user_id, $_customer_id, $s_start_time, $s_end_time); 

while ($smsstat_status_row = mysql_fetch_assoc($res_smsstat_status)) { 
    $total = $total + $smsstat_status_row['sum']; 
    $strXML = "<graph caption='".$oLangHandler->tr("Traffic Graph")."' xAxisName='".$oLangHandler->tr("Delivery Status")."' yAxisName='".$oLangHandler->tr("SMS Amount")."' decimalPrecision='0' formatNumberScale='0'>"; 
    if ($total > 0) $strXML .= "<set name='".$smsstat_status_row['sms_prefix']."' value='".$total."' color='#87CEFA'/>"; 
    $strXML .= "</graph>"; 
    echo renderChartHTML("chart/FusionCharts/Column2D.swf", "", $strXML, "myNext", 790, 300); 
} 
+0

刪除''從DISTINCT(sl.smsstatus)DISTINCT''和'添加sl.smsstatus '在'GROUP BY'聲明中... – 2012-02-03 13:27:41

+0

請使用'JOIN'關鍵字代替笛卡爾連接。另外,你真的想要在你的循環內調用renderChartHTML()*嗎? – DaveRandom 2012-02-03 13:28:27

+0

所以你說的問題是,當你直接在MySQL中執行相同的查詢時,你會得到發佈的結果,但是當你在PHP中執行它時,你會得到與MySQL不同的結果。是對的嗎?你確定你連接到正確的數據庫嗎?你確定你的查詢完全一樣嗎? – Travesty3 2012-02-03 13:43:32

回答

1

我已經在你的代碼做了一些修改:

 $res_smsstat_status = $oSMSStatHandlerCnf->get_stat_country($_user_id, $_customer_id, $s_start_time, $s_end_time); 

    // Initialize $total to 0 for safe programming 

     $total = 0; 

    // Initialize $strXML *before* the while loop. If you do this within the loop, then you'll get only 1 chart with all the values summed up. 

     $strXML = "<graph caption='".$oLangHandler->tr("Traffic Graph")."' xAxisName='".$oLangHandler->tr("Delivery Status")."' yAxisName='".$oLangHandler->tr("SMS Amount")."' decimalPrecision='0' formatNumberScale='0'>"; 

     while ($smsstat_status_row = mysql_fetch_assoc($res_smsstat_status)) { 
       $total = $total + $smsstat_status_row['sum']; 
       if ($total > 0) $strXML .= "<set name='".$smsstat_status_row['sms_prefix']."' value='".$total."' color='#87CEFA'/>"; 

     } 

     $strXML .= "</graph>"; 

     echo renderChartHTML("chart/FusionCharts/Column2D.swf", "", $strXML, "myNext", 790, 300);