gpt4 book ai didi

php - 改变使用 PHP/MySQL 生成的图形

转载 作者:行者123 更新时间:2023-11-30 23:37:18 25 4
gpt4 key购买 nike

我正在查看一个非常简单的 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';

DATE_FORMAT功能是提供魔力的东西。它将“MyDateColumn”格式化为 MM-YYYY(例如“06-2011”)。在 GROUP BY 中使用相同的格式完成查询。

更改代码的 setTitle 部分以标记来自查询的新数据:

$graph->setTitle("Average Support Ticket Ratings per Month");

另外,请注意我从您的查询中删除了 WHERE 子句。在它排除具有空“管理员”或空评级的“ticketreplies”之前。您应该根据要包含在图表中的数据来评估将其重新添加到查询中。

希望对您有所帮助。

~~编辑:

解决下面的评论 - 上面的查询按 avgRating 排序,因此您的图表将始终从低到高评级值。要让它从最早的月份到最近的月份,请更新 ORDER BY。使用 ORDER BY DATE_FORMAT(MyDateColumn, "%Y-%m")%Y-%m 在这里颠倒过来以确保排序工作正常。年份是这里最重要的元素,所以它排在第一位。次要的月份元素放在最后。

最后,要将图表限制为仅显示当前用户,请在 FROM 子句和 GROUP BY 子句之间添加一个 WHERE 子句.使用:WHERE YEAR(MyDateColumn) = YEAR(CURDATE()) 这指示 MySQL 仅在 MyDateColumn 中的日期年份为同一年时才考虑表中的元素作为当前日期的年份。

请提供 MySQL date-time functions回顾。你以后会感谢你自己的。 =)

关于php - 改变使用 PHP/MySQL 生成的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6449597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com