Помощник
|
Построение графиков средствами php |
sc2r2bey
|
Сообщение
#1
|
||
|
|
||
|
|||
ZiTosS |
20.6.2010, 19:52;
Ответить: ZiTosS
Сообщение
#2
|
|
sc2r2bey, Что именно интересует? Графический пакет в PHP присутствует
|
|
|
sc2r2bey
|
Сообщение
#3
|
|
Меня интересует, как сделать график из базы данных.
-------------------- программирую web и для we |
|
|
ZiTosS |
20.6.2010, 20:46;
Ответить: ZiTosS
Сообщение
#4
|
|
sc2r2bey, А что у тебя хранится в БД? Позиции какие-либо?
Вообще бы стоило класс написать, хотя уже есть: http://habrahabr.ru/blogs/webdev/30202/ http://www.softtime.ru/info/graph.php http://forum.vingrad.ru/topic-71149.html А вообще всё зависит от нужд и что и как хотим строить. Делать велосипеды, когда уже многое есть.... |
|
|
sc2r2bey
|
Сообщение
#5
|
|
мне нужен подобный график http://www.jqplot.com/tests/highlighterTests.php 1 вариант, но как увязать скрипт с php и mysql не понимаю пока.
скрипт вывода таблицы: [php]<?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>"; ?>[/php] получается http://novocms.ru/index.php?module=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'); хочется получить график где один вектор это сезон, а второй всего. -------------------- программирую web и для we |
|
|
ZiTosS |
20.6.2010, 22:50;
Ответить: ZiTosS
Сообщение
#6
|
|
sc2r2bey, во-первых, скрипт который ты привёл не на PHP, а на JavaScript
Во-вторых, опишу в комментах что каждая строчка означает на основе первого примера: // определяем 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]<?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>[/php] |
|
|
sc2r2bey
|
Сообщение
#7
|
|
sc2r2bey, во-первых, скрипт который ты привёл не на PHP, а на JavaScript ну да я и говорил, что это жабаскрипт и хочется подружить их. Кстати вопрос, а что надо изучить, чтоб разобраться в этом вопросе? -------------------- программирую web и для we |
|
|
ZiTosS |
21.6.2010, 11:56;
Ответить: ZiTosS
Сообщение
#8
|
|
sc2r2bey, а ты проверил? То что я написал, должно работать по сезонам, должен выводится график 3-го сезона.
Чтобы разобраться в данном вопросе тебе нужно изучить типы данных Javascript, в основном массивы и объекты. Затем, если хочется обращаться напрямую к БД, а не формировать данные на лету, тебе надо изучить Ajax. Естественно лучше не чистый Ajax(потому что он ужасен), а достаточно какой-либо библиотеки, к примеру jQuery |
|
|
sc2r2bey
|
Сообщение
#9
|
|
ну да я с jQuery и стараюсь работать, еще надо знать JSON
-------------------- программирую web и для we |
|
|
ZiTosS |
21.6.2010, 12:28;
Ответить: ZiTosS
Сообщение
#10
|
|
sc2r2bey, так ты и не ответил на первый мой вопрос...
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое | 5 | CULA | 3424 | 19.12.2023, 18:55 автор: CULA |
|
Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery Разработка сайтов и сервисов под-ключ |
0 | alexey | 1246 | 24.11.2023, 14:46 автор: alexey |
|
Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP) | 56 | qpPeW | 44941 | 19.7.2023, 10:03 автор: qpPeW |
|
Есть спецы по php/laravel? | 3 | Mixatraider | 1894 | 26.5.2023, 20:48 автор: Mixatraider |
|
Опытный PHP\Python разработчик в поиске интересных задач | 6 | daikzlex | 3409 | 25.5.2023, 13:55 автор: daikzlex |
Текстовая версия | Сейчас: 25.4.2024, 10:28 |