我试图在phpplot中创建一个图形,我希望按年份对所有注册用户进行分组,然后显示结果图形。
在数据库中是这样的:
id | utilizador | registado
----+------------+--------------------
1 | crisutu | 2014-05-04 10:41:53
2 | blabla | 2014-05-15 04:45:24
3 | hello | 2014-06-15 04:45:24
我想像May 2014那样转换图形 - 2注册用户2014年6月 - 1注册用户
<?php
#Incluimos a biblioteca
require("phplot-6.1.0/phplot.php");
#Definimos o objeto para inicar a "montagem" do gráfico
#Também delimitamos uma altura e largura do gráfico
$grafico = new PHPlot(750,600);
#Indicamos o formato de imagem a ser usado
$grafico->SetFileFormat("png");
#Indicamos o títul do gráfico e o título dos dados no eixo X e Y do mesmo
$grafico->SetTitle("NSMF");
$grafico->SetXTitle("Meses");
$grafico->SetYTitle("Utilizadores");
function getValues(){
$db = new mysqli("xxxxxxxxx", "xxxxxxxxxxxx", "xxxxxxxxxxxxx", "xxxxxxxxx");
$db->set_charset("utf8");
$query = $db->query("SELECT COUNT(id),registado FROM utilizadores GROUP BY YEAR(registado), MONTH(registado) ");
while($obj = $query->fetch_object()){
$values[] = array($obj->id, $obj->id );
}
return $values;
}
$dados = getValues();
$grafico->SetDataValues($dados);
#Exibimos o gráfico
$grafico->DrawGraph();
?>
你能帮我解决这个问题吗?告诉我出了什么问题?
答案 0 :(得分:0)
因此,您在代码中犯了三个错误:
我确实相信您正在尝试访问已获取对象的属性id
,但该属性实际上是COUNT(id)
。您可以考虑在查询中使用别名,例如:
SELECT COUNT(id) as id, registrado ...
默认情况下PHPlot::setDataValues
需要以下格式:
array(
array('key1', 'value11', 'value12'),
array('key2', 'value21', 'value22'),
array('key3', 'value31', 'value32'),
)
在你的情况下key
是几个月,所以每个数组的第一个值必须是适当的月份,所以写$values[] = array($obj->registado, $obj->id );
,而不是$values[] = array($obj->id, $obj->id );
最后,当您将日期显示为所需格式时,请在为date
指定值时使用php函数$value
(http://php.net/manual/en/function.date.php)。所以使用这样的东西:
$values[] = array(date("%F %Y", $obj->registado), $obj->id);