更改使用PHP/MySQL生成的图形
我正在看一个非常简单的PHP代码,它使用我们的计费系统的API生成一个图形。到目前为止,它显示了每位员工的平均票数。我想把它改为只显示当前年度每月的平均票务评级 在同一个表中有一个“日期”字段,其值的格式为每张票据,如“2010-08-23 00:48:22” 如何修改此代码以显示给定年份每月的平均票务评级更改使用PHP/MySQL生成的图形,php,mysql,api,graph,whmcs,Php,Mysql,Api,Graph,Whmcs,我正在看一个非常简单的PHP代码,它使用我们的计费系统的API生成一个图形。到目前为止,它显示了每位员工的平均票数。我想把它改为只显示当前年度每月的平均票务评级 在同一个表中有一个“日期”字段,其值的格式为每张票据,如“2010-08-23 00:48:22” 如何修改此代码以显示给定年份每月的平均票务评级 <?php if (!defined("WHMCS")) die("This file cannot be accessed directly"); $descriptio
<?php
if (!defined("WHMCS"))
die("This file cannot be accessed directly");
$description = "This graph shows average support ratings by staff member";
if ($statsonly) { return false; }
$chartdata = array();
$query = "SELECT DATE_FORMAT(date, '%m-%Y') AS theMonth, AVG(rating) AS avgRating ";
$query .= "FROM tblticketreplies WHERE admin != '' AND rating !='0' ";
$query .= "GROUP BY DATE_FORMAT(date, '%m-%Y') ";
$query .= "ORDER BY avgRating ASC";
$result = mysql_query($query);
//$query = "SELECT admin, AVG(rating) AS avgrating FROM `tblticketreplies` WHERE admin != '' AND rating!='0' GROUP BY admin ORDER BY avgrating ASC";
//$result = mysql_query($query);
while ($data = mysql_fetch_array($result))
{
$chartdata[$data[0]] = round($data[1],2);
}
$graph=new WHMCSGraph(650,400);
$graph->addData($chartdata);
$graph->setTitle("Average Support Ticket Ratings by Month");
$graph->setGradient("lime", "green");
$graph->setDataValues(true);
$graph->setXValuesHorizontal(true);
?>
首先,您需要修改查询以返回每月平均评分,而不是像现在这样返回每个“管理员”的平均评分。我不知道数据库中有日期的列的名称,但假设它的名称为“MyDateColumn”
要获得月平均值,您需要类似以下内容的查询:
$query = 'SELECT DATE_FORMAT(MyDateColumn, "%m-%Y") AS theMonth, AVG(rating) AS avgRating ';
$query .= 'FROM tblticketreplies ';
$query .= 'GROUP BY DATE_FORMAT(MyDateColumn, "%m-%Y") ';
$query .= 'ORDER BY avgRating ASC';
功能就是提供魔力的东西。它将“MyDateColumn”的格式设置为MM-YYYY(例如“06-2011”)。在分组依据中使用相同的格式来完成查询
更改代码的setTitle
部分,以标记来自查询的新数据:
$graph->setTitle("Average Support Ticket Ratings per Month");
另外,请注意,我从查询中删除了WHERE子句。在此之前,它排除了带有空“admin”或空评级的“ticketreplies”。您应该根据要包含在图表中的数据来评估是否将其添加回查询
希望这会有帮助
~~
编辑:
处理下面的注释-上面的查询按avgRating
进行排序,因此您的图表将始终从低评级值变为高评级值。要使订单从最早的月份转到最近的月份,请通过
更新订单。使用按日期排序\u格式(MyDateColumn,“%Y-%m”)
。此处的%Y-%m
相反,以确保排序工作正常。这一年是这里最重要的一年,所以它是第一年。不太重要的月份元素是最后一个
最后,要将图形仅限于当前用户,请在FROM
子句和groupby
子句之间添加WHERE
子句。使用:<代码>年(MyDATECOLLUN)=年(CULTDATE())< /Cord>这指示MySQL只考虑表中的日期<代码> MyDateColumn < /C> >与当前日期年相同的元素。
一定要给学生复习。以后你会感谢你自己的 真是太棒了,非常感谢你。谢谢你对正在发生的事情的精彩解释。不过有两个问题。。。这似乎不符合规定,第一个栏是11-2010,第二个栏是10-2010,12-2010,8-2010,等等。第二,我怎么能限制到今年呢?请注意,我已经用更新的代码更新了最初帖子中的代码块。我也会将你的答案标记为“已回答”。我只是想等你回答这两个问题:)