график php gd,

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
Имеется следующий скрипт:

Код: Выделить всё

  define('GRAPH_WIDTH',         400);               // ширина картинки
  define('GRAPH_HEIGHT',        300);               // высота картинки
  define('GRAPH_OFFSET_TOP',    40);                // отступ сверху
  define('GRAPH_OFFSET_LEFT',   40);                // отступ слева
  define('GRAPH_OFFSET_RIGHT',  5);                 // отстут справа
  define('GRAPH_OFFSET_BOTTOM', 30);

 
 
  define('FONT_NAME', '/_font/sansation_regular.ttf');                 // Имя шрифта
  define('FONT_SIZE', 6);                          // Размер шрифта

$colors = array(0xFFA500);

 
 
$rs = mysql_query ("SELECT * FROM table WHERE id='58' AND date>".strtotime('-1 month')." ORDER BY date ASC");


while ($data2=mysql_fetch_array($rs))
{


$Data[$data2['date']] = $data2['chislo'];


}

      
  // Считаем ширину столбцов
  $col_width = (GRAPH_WIDTH - GRAPH_OFFSET_LEFT - GRAPH_OFFSET_RIGHT) / count($Data);

  // Считаем высоту столбца, соответствующего максимальному значению
  $col_maxheight = (GRAPH_HEIGHT - GRAPH_OFFSET_TOP - GRAPH_OFFSET_BOTTOM);

  // Ищем максимальное значение в массиве, соответствующее столбцу максимальной высоты
  $max_value = max($Data);

  $image = imagecreatetruecolor(GRAPH_WIDTH,GRAPH_HEIGHT) // создаем изображение...
    or die('Cannot create image');     // ...или прерываем работу скрипта в случае ошибки

  imagefill($image, 0, 0, 0x000000);  // белый фон

  // рисуем столбцы
  $x = GRAPH_OFFSET_LEFT;
  $y = GRAPH_OFFSET_TOP + $col_maxheight;
  $i = 0;
  foreach($Data as $name => $value) {
    imagefilledrectangle(              // рисуем сплошной прямоугольник
      $image,
      $x,
      $y - round($value*$col_maxheight/$max_value),
      $x + $col_width - 1,
      $y,
      $colors[$i++%count($colors)]
    );

    // Выводим текст:
$text = date("D",$name);
   
   

   
    // .. расчет координат...
    $coord = imagettfbbox(FONT_SIZE,0,FONT_NAME,$text);
      $text_x = $x + ($col_width - $coord[2] - $coord[0]) / 2;
    $text_y = GRAPH_HEIGHT - 10;
    // .. и вывод текста
    imagettftext($image,FONT_SIZE,0,$text_x,$text_y,0xCCCCCC,FONT_NAME,$text);

    $x += $col_width;
  }



  // рисуем координатную ось
  imageline($image, GRAPH_OFFSET_LEFT - 5, GRAPH_OFFSET_TOP,
            GRAPH_OFFSET_LEFT - 5, $y, 0xCCCCCC);
  for($value=0; $value<=$max_value; $value++) {
    imageline($image, GRAPH_OFFSET_LEFT - 7, $Y = $y - round($value*$col_maxheight/$max_value),
            GRAPH_OFFSET_LEFT - 5, $Y, 0xCCCCCC);
    imagestring($image, 1, GRAPH_OFFSET_LEFT / 2, $Y - 4, $value, 0xCCCCCC);
  }

  imagepng($image);
  header('Content-type: image/png');
  imagedestroy($image);




Как выглядет сейчас http://imageshack.us/photo/my-images/35/crtstatp.png/

тоесть сейчас если в базе имеются одинаковые дни то они тупа дублируються по очереди!


а надо чтобы нижняя графа имела следующий вид Tue,Fri,Sat, San,Mon,Wed,Thu

тоесть дни недели, и если $text = 'Tue'; то все значения Tue подставляються в графу Tue а не дублируються по очереди!)
p.s: В php я нуб!!! )

Аватара пользователя
AgentSIB
Администратор
Сообщения: 329
Зарегистрирован: 17 май 2010
Видимо даты неверно в массив заносишь. Проверяй выборку.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
занашу верно в униксе но заносятся они каждые 5 мин тоесть одна дата но разное время вот мне и надо если одинакавые даты то лажить в графике друг на друга а не поочеради!
p.s: В php я нуб!!! )

Аватара пользователя
AgentSIB
Администратор
Сообщения: 329
Зарегистрирован: 17 май 2010
Я еще раз говорю, выборка не та. Тут нужна агрегация.
Попробуй так

Код: Выделить всё

SELECT UNIX_TIMESTAMP(DATE_FORMAT(date,'%Y-%m-%d 00:00:00')) AS ddate, SUM(chislo) chislo FROM table WHERE id = 58 AND date>".strtotime('-1 month')." GROUP BY ddate ORDER BY ddate

И замени

Код: Выделить всё

$Data[$data2['date']] = $data2['chislo'];

на

Код: Выделить всё

$Data[$data2['ddate']] = $data2['chislo'];

B вообще chislo - это быдлокод.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
Ни какая агрегация не нужна выборку оставил туже просто построение самого графика надо было переделать вот что в итоге получилось

http://www.mkgamemonitor.ru/player/I%20 ... 00x100.png

а по поводу chislo так его в базе нет и в коде тоже это я исправил чтоб было понятней!
p.s: В php я нуб!!! )

Аватара пользователя
AgentSIB
Администратор
Сообщения: 329
Зарегистрирован: 17 май 2010
mkden
Вот ты сначала понаисправляешь, а потом жалуешься на неверные ответы :))) Нужно было с примером данных выкладывать. Тот запрос, что я написал будет работать в обоих случаях.
Frustra fit per plura quod potest fieri per pauciora © Закон "Бритвы Оккама"


Вернуться в «Вопросы по программированию»