【问题标题】:Use MySQL query result to create chart with FusionCharts使用 MySQL 查询结果通过 FusionCharts 创建图表
【发布时间】:2012-02-06 14:56:19
【问题描述】:

我有这个问题

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

我想根据国家前缀和短信数量在 Fusion Chart 上显示此结果。

这是我获取结果并显示在图表上的代码,但它有一个问题,它只显示第一行并且 $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);
}

【问题讨论】:

  • DISTINCT (sl.smsstatus) 中删除DISTINCT 并在GROUP BY 语句中添加sl.smsstatus...
  • 请使用JOIN 关键字而不是笛卡尔连接。另外,你真的想要对renderChartHTML() inside 你的循环的调用吗?
  • 所以你说的问题是,当你直接在 MySQL 中执行相同的查询时,你会得到发布的结果,但是当你在 PHP 中执行它时,你会得到与 MySQL 不同的结果。那正确吗?你确定你连接到正确的数据库吗?你确定你的查询完全一样吗?
  • 感谢您的回答,我已删除DISTINCT。现在我的查询 SELECT 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 &gt;= 1328050800 AND st.sendtime &lt;= 1328309999 AND st.sms_trans_id = sl.trans_id GROUP BY sl.sms_prefix ,我在循环之后调用了 renderChartHTML() 并且它在图表上仅显示一个前缀(总共 971=4)
  • 是的,(Travesty3)我得到了正确的结果,但无法在图表上正确显示,我猜是循环有问题

标签: php mysql fusioncharts


【解决方案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);

【讨论】:

    猜你喜欢
    • 2015-09-24
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多