为什么我的SQL数据导致我的图表的Y轴跳转到无穷大?

时间:2012-02-07 17:02:54

标签: php drupal drupal-modules

我一直在尝试使用Drupal中的打开Flash Chart 2构建图表(好吧,问题与Drupal或图表和图表模块无关)

对于图表,我从MySQL数据库中获取数据。下面是获取数据并生成图表的函数:

function my_module_charts_graphs_test() {

 global $user;
$uname = $user->name;
$sql = "Select total_calorie from health_calorie_consumed where name = '%s'";
$result = db_query($sql,$uname);


  while($row = db_fetch_array($result))
{

    $data[] = $row[total_calorie];

}

$canvas = charts_graphs_get_graph('open-flash');

  $canvas->title = "OpenFlashCharts Chart";
  $canvas->type = "bar_3d";
  $canvas->y_legend = "Y Legend";
  $canvas->colour = '#808000';
  $canvas->width = 700;
  $canvas->height = 300;
  $canvas->y_max=1000;
  $canvas->y_min=0;
  $canvas->y_step=100;
  $canvas->series = array(
    'Some Value' => array(923,623,73,92,5,722,643,156,345),
    //'Page Views' => array_values($data),
  );
  $canvas->x_labels = array('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');

  // $canvas->x_labels = array_values($data);

  $out = $canvas->get_chart();

  return $out;


} 

当我运行代码时,我得到下面的图表:

preview-1 http://oi43.tinypic.com/2hcfgqp.jpg

因此,它与本地声明的数组完美配合。但我需要使用SQL中的数组。因此,我取消注释并更改$canvas->c_labels$canvas->series

 $canvas->x_labels = array_values($data); //$data is array from sql query

'Page Views' => array_values($data)

现在,令我惊讶的是,我得到下面的图表:

preview-2 http://oi41.tinypic.com/spb42g.jpg

正如我们所看到的,x_axis值根据查询是正确的,但y_axis表示与无穷大相同的值。为什么这样做?

这个奇怪的问题还有另一面。最初我认为这种方法可能无法与$canvas->series一起使用,但我尝试了以下代码并且它运行良好:

$array = array(0,0,117,207,130,260,207); //these values are that are fetched from sql
$canvas->series = array(
   'some values'=>array_values($array),
   );

所以这个“无限”问题只出现在从SQL查询获取的数组中,而且只出现在Y轴上。

我的SQL的

print_r($data)如下:

Array ( [0] => 0 [1] => 0 [2] => 117 [3] => 207 [4] => 130 [5] => 260 [6] => 207 ) 

以下是我为$ canvas->系列尝试过的其他一些组合,但失败了...

$test = implode(",",$data); // $data is the array fetched from sql
$abcd = "array(".$test.")"; // array(0,0,117,207,130,260,207)

$canvas->series=>array(
      'some value'=>print($abcd), //i tried to print those values in standard format..:p
      );

'some values'=>$abcd, // doesn't work..!

'some values'=>$data, // doesn't work.!

因此,我尝试了所有我无法想到的事情。

2 个答案:

答案 0 :(得分:1)

哇..最后我找到了答案,感谢drupal论坛.. :)

事实证明它是一个类型问题..!即,如果我使用以下代码,它可以工作.. !!

<?php
$data[] = (int) $row[total_calorie];
?>

我不知道为什么它是一个类型问题。或者这个有用的原因,但它确实解决了我的问题......!感谢大家帮我解决.. :)

答案 1 :(得分:0)

尝试插入

 $data = array();

while($row = db_fetch_array($result))

之前

只使用

 'Page Views' => $data