Изменение Графика, созданного с использованием PHP / MySQL - PullRequest
1 голос
/ 23 июня 2011

Я смотрю на очень простой код 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);

?>

1 Ответ

0 голосов
/ 23 июня 2011

Вам нужно будет начать с изменения запроса, чтобы получить среднюю оценку за месяц, а не среднюю оценку для «администратора», как сейчас. Я не знаю имя столбца в вашей базе данных, в котором есть даты, но допустим, что он называется «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» с пустым «admin» или пустым рейтингом. Вы должны оценить возможность добавления этого обратно в запрос в зависимости от того, какие данные вы хотите включить в свой график.

Надеюсь, это полезно.

~~ Edit:

Обращаясь к комментариям ниже - запрос выше сортируется по avgRating, поэтому ваш график всегда будет переходить от низкого к высокому значению рейтинга. Для перехода с самого раннего месяца на последний, обновите ORDER BY. Используйте ORDER BY DATE_FORMAT(MyDateColumn, "%Y-%m"). %Y-%m здесь перевернут, чтобы обеспечить правильную сортировку. Год - самый важный элемент здесь, поэтому он идет первым. Менее значимый элемент месяца идет последним.

И, наконец, чтобы ограничить график только текущим пользователем, добавьте предложение WHERE между предложением FROM и предложением GROUP BY. Использование: WHERE YEAR(MyDateColumn) = YEAR(CURDATE()) Это предписывает MySQL рассматривать элементы из вашей таблицы только тогда, когда год даты в MyDateColumn совпадает с годом текущей даты.

Дайте функции даты и времени MySQL обзор. Вы поблагодарите себя позже. =)

...