动态X轴图形将根据行数更改

时间:2011-11-28 12:25:00

标签: php mysql graph date

假设我有一个带有id,一些测量和DATE列的mysql表。

示例:id,measurements,date_entered

此表存储患者的一些测量结果,以便为他保留记录。 我想创建一个图表,根据数据库中存在的行数,动态地改变X轴。

例如,如果表格中只有7行,我需要用图表表示每天7天的图表。如果超过14天,我希望它在X轴上更改为2周,并且在Y轴上的平均测量值(平均1周和其他平均值)等等,从数周到数月。< / p>

任何人都可以帮我这个吗?在我的情况下,我无法想到会做的事情...... 我使用JPGraph制作折线图,但我没有问题。我的问题是如何处理结果。

我希望你能理解我需要的东西!感谢。

1 个答案:

答案 0 :(得分:0)

这样的东西?

// Get the results from the database
$query = "SELECT `data_col` FROM `table` WHERE `condition_col` = 'some value'";
$result = mysql_query($query);

// Get all results into array and count them
$results = array();
for ($i = 0; $row = mysql_fetch_assoc($result); $i++) {
  $results[] = $row;
}

// Re-format the data depending on number of results
$data = array();
if ($i < 14) { // Less than 14 days, show per day
  foreach ($results as $row) {
    $data[] = $row['data_col'];
  }
} else if ($i < 56) { // Less than 8 weeks, show per-week
  $thisweek = array();
  for ($j = 0; isset($results[$j]); $j++) { // Loop the results
    $thisweek[] = $results[$j]['data_col']; // Add result to this week total
    if ($j % 7 == 0 && $j > 0) { // Every 7 days...
      $data[] = array_sum($thisweek) / 7; // ...calculate the week average...
      $thisweek = array(); // ...and reset the total
    }
  }
  // If there is an incomplete week, add it to the data
  $data[] = array_sum($thisweek) / count($thisweek);
} else { // 8 weeks or more, show per-month
  $thismonth = array();
  for ($j = 0; isset($results[$j]); $j++) { // Loop the results
    $thismonth[] = $results[$j]['data_col']; // Add result to this month total
    if ($j % 28 == 0 && $j > 0) { // Every 28 days...
      $data[] = array_sum($thismonth) / 28; // ...calculate the month average...
      $thismonth = array(); // ...and reset the total
    }
  }
  // If there is an incomplete month, add it to the data
  $data[] = array_sum($thismonth) / count($thismonth);
}

// $data now contains an array from which you should be able to draw your
// graph, where array keys are (sort of) x values and array values are y
// values.

显然,此解决方案假定为期28天 - 它不使用日历,只是天数。你可以做一些可怕的事情,包括基于date()或类似的返回的一些值计算统计数据,但这可能会大大增加计算开销并减慢进程。

希望这会给你一个开始的地方。