Динамический график оси X, который будет меняться в зависимости от количества строк - PullRequest
0 голосов
/ 28 ноября 2011

Допустим, у меня есть таблица mysql с идентификатором, некоторыми измерениями и столбцом DATE.

Пример: идентификатор, измерения, date_entered

В этой таблице хранятся некоторые измерения пациента, так чтовести запись для него.Я хочу сделать график, который в соответствии с количеством строк, существующих в базе данных, будет динамически меняться по оси X.

Например, если в таблице только 7 строк, мне нужно представлять 7 дней.на график с измерением на каждый день.Если осталось более 14 дней, я хочу, чтобы оно изменилось на 2 недели по оси X и средние измерения (среднее за 1 неделю и среднее по другим тоже) по оси Y и т. Д. С недель до месяцев.

Может кто-нибудь помочь мне в этом?Я не могу придумать, что будет в моем случае ... Я использую JPGraph для построения линейного графика, но у меня нет проблем там.Моя проблема в том, как справиться с результатами.

Надеюсь, вы поймете, что мне нужно!Спасибо.

1 Ответ

0 голосов
/ 28 ноября 2011

Как-то так?

// 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() или подобным, но это, вероятно, резко увеличило бы затраты на вычисления и замедлило бы процесс.

Надеюсь, это даст вам местодля начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...