Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改使用PHP/MySQL生成的图形_Php_Mysql_Api_Graph_Whmcs - Fatal编程技术网

更改使用PHP/MySQL生成的图形

更改使用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代码,它使用我们的计费系统的API生成一个图形。到目前为止,它显示了每位员工的平均票数。我想把它改为只显示当前年度每月的平均票务评级

在同一个表中有一个“日期”字段,其值的格式为每张票据,如“2010-08-23 00:48:22”

如何修改此代码以显示给定年份每月的平均票务评级

<?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,等等。第二,我怎么能限制到今年呢?请注意,我已经用更新的代码更新了最初帖子中的代码块。我也会将你的答案标记为“已回答”。我只是想等你回答这两个问题:)