Перейти к содержимому

Реферальная программа Мегаплана

Выбрать шаблон и создать сайт

Построение графиков средствами php

#1 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71
0

Отправлено 20 Июнь 2010 - 18:22

кто нибудь сталкивался?

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 20 Июнь 2010 - 18:52

sc2r2bey, Что именно интересует? Графический пакет в PHP присутствует :rolleyes:
  • 0

#3 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 20 Июнь 2010 - 19:32

Меня интересует, как сделать график из базы данных.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 20 Июнь 2010 - 19:46

sc2r2bey, А что у тебя хранится в БД? Позиции какие-либо?
Вообще бы стоило класс написать, хотя уже есть:
http://habrahabr.ru/...s/webdev/30202/
http://www.softtime.ru/info/graph.php
http://forum.vingrad...opic-71149.html

А вообще всё зависит от нужд и что и как хотим строить. Делать велосипеды, когда уже многое есть....
  • 0

#5 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 20 Июнь 2010 - 20:12

мне нужен подобный график http://www.jqplot.co...ighterTests.php 1 вариант, но как увязать скрипт с php и mysql не понимаю пока.
скрипт вывода таблицы:
<?php
// публикуем аналитику
echo "<div class=\"article\"><h3>Аналитика</h3>";

echo "<table id=\"tbl1\">
<thead>
<tr>
<td>месяц, сезон</td>
<td>июль</td>
<td>август</td>
<td>сентябрь</td>
<td>октябрь</td>
<td>ноябрь</td>
<td>декабрь</td>
<td>январь</td>
<td>февраль</td>
<td>март</td>
<td>апрель</td>
<td>май</td>
<td>июнь</td>
<td>всего</td>
</tr>
</thead>";

$result = mysql_query("SELECT COUNT(*) FROM `season`");
$posts = mysql_result($result,0);
if ($posts > 0)
{
for ($i = 1; $i <= $posts; $i++)
{
echo "<tr>";
echo "<td>";
$sql = "SELECT * FROM `season` WHERE `id`=$i";
$season= mysql_query($sql);
if (mysql_num_rows($season) > 0)
{
$qseason = mysql_fetch_assoc($season);
echo $qseason['season'];
$id = $qseason['id'];
}
else
{
echo $GLOBALS["error"];
}
echo"</td>";
$summa = 0;
$sql = "SELECT * FROM `month` WHERE `season`=$id";
$month= mysql_query($sql);
if (mysql_num_rows($month) > 0)
{
while ($qmonth = mysql_fetch_assoc($month))
{

echo "<td>".$qmonth['parameter']."</td>";
$summa = $summa+$qmonth['parameter'];
}
echo "<td>".$summa."</td>";
}
else
{
echo $GLOBALS["error"];
}

echo "</tr>";
}
}
else
{
echo $GLOBALS["error"];
}


echo"</table>";

echo"</div>";

?>

получается http://novocms.ru/in...odule=analitics

дамп таблиц:
-- --------------------------------------------------------

--
-- Table structure for table `month`
--

CREATE TABLE IF NOT EXISTS `month` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`season` int(11) unsigned NOT NULL,
`month` varchar(8) NOT NULL,
`parameter` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=121;

--
-- Dumping data for table `month`
--

INSERT INTO `month` (`id`, `season`, `month`, `parameter`) VALUES
(1, 1, 'Июль', 0),
(2, 1, 'Август', 0),
(3, 1, 'Сентябрь', 16496),
(4, 1, 'Октябрь', 176715),
(5, 1, 'Ноябрь', 66387),
(6, 1, 'Декабрь', 52527),
(7, 1, 'Январь', 41851),
(8, 1, 'Февраль', 38021),
(9, 1, 'Март', 5626),
(10, 1, 'Апрель', 4633),
(11, 1, 'Май', 8545),
(12, 1, 'Июнь', 0),
(13, 2, 'Июль', 53830),
(14, 2, 'Август', 128420),
(15, 2, 'Сентябрь', 125894),
(16, 2, 'Октябрь', 119930),
(17, 2, 'Ноябрь', 136761),
(18, 2, 'Декабрь', 111448),
(19, 2, 'Январь', 138979),
(20, 2, 'Февраль', 156846),
(21, 2, 'Март', 162972),
(22, 2, 'Апрель', 130116),
(23, 2, 'Май', 170750),
(24, 2, 'Июнь', 175378),
(25, 3, 'Июль', 176021),
(26, 3, 'Август', 164719),
(27, 3, 'Сентябрь', 169329),
(28, 3, 'Октябрь', 178041),
(29, 3, 'Ноябрь', 180163),
(30, 3, 'Декабрь', 147578),
(31, 3, 'Январь', 190407),
(32, 3, 'Февраль', 149225),
(33, 3, 'Март', 178640),
(34, 3, 'Апрель', 160315),
(35, 3, 'Май', 156939),
(36, 3, 'Июнь', 114800),
(37, 4, 'Июль', 65960),
(38, 4, 'Август', 107867),
(39, 4, 'Сентябрь', 151659),
(40, 4, 'Октябрь', 98365),
(41, 4, 'Ноябрь', 147518),
(42, 4, 'Декабрь', 68532),
(43, 4, 'Январь', 49748),
(44, 4, 'Февраль', 41059),
(45, 4, 'Март', 27000),
(46, 4, 'Апрель', 41446),
(47, 4, 'Май', 10130),
(48, 4, 'Июнь', 34700),
(49, 5, 'Июль', 0),
(50, 5, 'Август', 106315),
(51, 5, 'Сентябрь', 166923),
(52, 5, 'Октябрь', 172461),
(53, 5, 'Ноябрь', 152057),
(54, 5, 'Декабрь', 163575),
(55, 5, 'Январь', 128993),
(56, 5, 'Февраль', 74725),
(57, 5, 'Март', 171347),
(58, 5, 'Апрель', 193142),
(59, 5, 'Май', 174807),
(60, 5, 'Июнь', 190615),
(61, 6, 'Июль', 220819),
(62, 6, 'Август', 209000),
(63, 6, 'Сентябрь', 230000),
(64, 6, 'Октябрь', 177567),
(65, 6, 'Ноябрь', 200863),
(66, 6, 'Декабрь', 201964),
(67, 6, 'Январь', 181044),
(68, 6, 'Февраль', 141572),
(69, 6, 'Март', 167000),
(70, 6, 'Апрель', 107648),
(71, 6, 'Май', 112144),
(72, 6, 'Июнь', 115856),
(73, 7, 'Июль', 101536),
(74, 7, 'Август', 209864),
(75, 7, 'Сентябрь', 207445),
(76, 7, 'Октябрь', 205428),
(77, 7, 'Ноябрь', 219670),
(78, 7, 'Декабрь', 207273),
(79, 7, 'Январь', 180000),
(80, 7, 'Февраль', 205000),
(81, 7, 'Март', 206197),
(82, 7, 'Апрель', 223489),
(83, 7, 'Май', 245761),
(84, 7, 'Июнь', 115500),
(85, 8, 'Июль', 190000),
(86, 8, 'Август', 210000),
(87, 8, 'Сентябрь', 244000),
(88, 8, 'Октябрь', 341642),
(89, 8, 'Ноябрь', 315000),
(90, 8, 'Декабрь', 295000),
(91, 8, 'Январь', 240179),
(92, 8, 'Февраль', 76000),
(93, 8, 'Март', 85478),
(94, 8, 'Апрель', 42853),
(95, 8, 'Май', 74355),
(96, 8, 'Июнь', 8257),
(97, 9, 'Июль', 216114),
(98, 9, 'Август', 372571),
(99, 9, 'Сентябрь', 330061),
(100, 9, 'Октябрь', 301292),
(101, 9, 'Ноябрь', 323594),
(102, 9, 'Декабрь', 391895),
(103, 9, 'Январь', 173019),
(104, 9, 'Февраль', 230746),
(105, 9, 'Март', 397500),
(106, 9, 'Апрель', 337783),
(107, 9, 'Май', 247738),
(108, 9, 'Июнь', 190500),
(109, 10, 'Июль', 256693),
(110, 10, 'Август', 335875),
(111, 10, 'Сентябрь', 262520),
(112, 10, 'Октябрь', 352105),
(113, 10, 'Ноябрь', 227000),
(114, 10, 'Декабрь', 313718),
(115, 10, 'Январь', 290000),
(116, 10, 'Февраль', 270000),
(117, 10, 'Март', 260000),
(118, 10, 'Апрель', 290000),
(119, 10, 'Май', 0),
(120, 10, 'Июнь', 0);

-- --------------------------------------------------------

--
-- Table structure for table `season`
--

CREATE TABLE IF NOT EXISTS `season` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`season` varchar(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=11;

--
-- Dumping data for table `season`
--

INSERT INTO `season` (`id`, `season`) VALUES
(1, '2000 - 2001'),
(2, '2001 - 2002'),
(3, '2002 - 2003'),
(4, '2003 - 2004'),
(5, '2004 - 2005'),
(6, '2005 - 2006'),
(7, '2006 - 2007'),
(8, '2007 - 2008'),
(9, '2008 - 2009'),
(10, '2009 - 2010');


хочется получить график где один вектор это сезон, а второй всего.
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 20 Июнь 2010 - 21:50

sc2r2bey, во-первых, скрипт который ты привёл не на PHP, а на JavaScript :rolleyes:
Во-вторых, опишу в комментах что каждая строчка означает на основе первого примера:
// определяем JS-массив линии, формат которого
// Array([X1,Y1], [X2,Y2], ..., [Xn,Yn])
line1=[['23-May-08', 578.55], ['20-Jun-08', 566.5], ['25-Jul-08', 480.88], ['22-Aug-08', 509.84],
	['26-Sep-08', 454.13], ['24-Oct-08', 379.75], ['21-Nov-08', 303], ['26-Dec-08', 308.56],
	['23-Jan-09', 299.14], ['20-Feb-09', 346.51], ['20-Mar-09', 325.99], ['24-Apr-09', 386.15]];

// создаём объект plot1 передавая параметры: id блока куда вставляем график (chart1), что вставляем (line1 - обвертка в массив)
plot1 = $.jqplot('chart1', [line1], {
	// остальные параметры передаются как неименованный объект
	title:'Data Point Highlighting', // заголовок графика
	axes:{ // координаты
		xaxis:{ // Координаты X
			renderer:$.jqplot.DateAxisRenderer, // изображать (тип - дата) 
			rendererOptions:{tickRenderer:$.jqplot.CanvasAxisTickRenderer}, // опции рисования (SVG графика)
			tickOptions:{ // опции отметок
				formatString:'%b %#d, %Y', // формат вывода отметок
				fontSize:'10pt', // размер шрифта отметок
				fontFamily:'Tahoma', // имя шрифта отметок
				angle:-30 // поворот отметок на -30 градусов
			}
		},
		yaxis:{tickOptions:{formatString:'$%.2f'}} // Координаты Y - опции отметок - формат вывода отметок
	},
	highlighter: {sizeAdjust: 7.5}, // как я понял, речь идёт о подсветке пунсонов, а точнее опция размера пунсона при наведении
	cursor: {show: false} // отключение отображения курсора(противоположность примеру 2)
});
В-третьих, чтобы получить то что ты хочешь, тебе нужно использовать Ajax-запрос к PHP-скрипту, который будет тебе формировать нужные данные line1. Передавать эти данные можно в формате JSON.
В примере переменная line1 задается вручную, нам же надо отправить Ajax-запрос серверу, который в ответ пришлёт сформированные JSON-данные, которые затем надо будет передать для формирования графика.

Было бы время, я бы показал на примере твоих данных, как это реализовывается. А в общих словах я тебе всё описал, если ты знаешь JSON-формат и, имея на хостинге поодержку на стороне PHP, библиотеки использования JSON-данных(есть аналог-класс формирования/разбора JSON написанный на PHP, называется fastJSON), ты формируешь на стороне сервера по запросу массив и кодируешь его в JSON формат. Затем эти JSON-данные возвращаются клиенту, и там мы передаём эти данные для формированрия графика скрипту jqplot

Можно обойтись и без AJAX, чисто формируя данные массива на лету :)
<?php

// сезон
$season_coords = array();
$season_str = "";

$season = 3;
$sql = "SELECT * FROM `month` WHERE season={$season}";
$res = mysql_query($sql);
if( mysql_num_rows($res) == 0 )
{
$season_coords[] = "[0,0]";
} else {
while( $array = mysql_fetch_assoc($res) )
$season_coords[] = "[{$array['month']}, {$array['parameter']}]";
}

?>
<html>
<head>
<script type="text/javascript">
season = <?php echo"[". implode(',', $season_coords) ."]"?>;

plot_season = $.jqplot('block_season', [season], {
title:'Сезон 3',
axes:{
xaxis:
rendererOptions:{tickRenderer:$.jqplot.CanvasAxisTickRenderer},
tickOptions:{
fontSize:'10pt',
fontFamily:'Tahoma',
angle:-30
}
},
highlighter: {sizeAdjust: 7.5},
cursor: {show: false}
});
</script>
</head>
<body>
<div id="block_season"></div>
</body>
</html>

  • 0

#7 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 21 Июнь 2010 - 05:59

sc2r2bey, во-первых, скрипт который ты привёл не на PHP, а на JavaScript :rolleyes:

ну да я и говорил, что это жабаскрипт и хочется подружить их.

Кстати вопрос, а что надо изучить, чтоб разобраться в этом вопросе?
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 21 Июнь 2010 - 10:56

sc2r2bey, а ты проверил? То что я написал, должно работать по сезонам, должен выводится график 3-го сезона.
Чтобы разобраться в данном вопросе тебе нужно изучить типы данных Javascript, в основном массивы и объекты. Затем, если хочется обращаться напрямую к БД, а не формировать данные на лету, тебе надо изучить Ajax. Естественно лучше не чистый Ajax(потому что он ужасен), а достаточно какой-либо библиотеки, к примеру jQuery
  • 0

#9 surfer

surfer
    Topic Starter
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 21 Июнь 2010 - 11:23

ну да я с jQuery и стараюсь работать, еще надо знать JSON
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 21 Июнь 2010 - 11:28

sc2r2bey, так ты и не ответил на первый мой вопрос...
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru