我正在尝试用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我想在图中转换为2014年5月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();
?>你能帮我解决这个问题吗?告诉我哪里不对劲?
发布于 2014-09-10 19:48:49
下面是你在代码中犯的三个错误:
访问错误的对象属性
我确信您正在尝试访问fetched object的属性id,但该属性实际上是COUNT(id)。您可以考虑在查询中使用别名,例如:
SELECT COUNT(id) as id, registrado ...错误的数据格式
默认情况下,PHPlot::setDataValues期望以下格式:
array(
array('key1', 'value11', 'value12'),
array('key2', 'value21', 'value22'),
array('key3', 'value31', 'value32'),
)在本例中,keys是月份,因此每个数组的第一个值必须是适当的月份,因此请编写$values[] = array($obj->registado, $obj->id );,而不是$values[] = array($obj->id, $obj->id );
日期格式化
最后,为了让日期以所需的格式显示,在为$value赋值时,请使用php function date (http://php.net/manual/en/function.date.php)。所以使用类似这样的东西:
$values[] = array(date("%F %Y", $obj->registado), $obj->id);https://stackoverflow.com/questions/25763612
复制相似问题