Забыли пароль?
Запросите новый здесь.

Автор темы: Sup38
ID темы: 2207
Информация:
Тема содержит 15 сообщения, была просмотрена 22179 раз.  Имеются прикрепленные файлы.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Вопросы новичков
 Распечатать тему
График highcharts и MSSQL данные
Sup38
Всем доброго времени, возникла ситуация в которой я не могу разобраться. Может кто подскажет.

Ниже приведет код php, в нем имеется:
- Подключение к базе;
- Выбор данных из базы;
- Построение графика, на основе данных базы.

Вот с последним пунктом и проблема. Для построения графиков я взял за основу модуль highcharts, но заставить его взять данные для оси (не важной какой x или y) не могу. Суть такова:
Есть два столбца в базе ( 1-й TimeValue, 2-й CurrValue). Мне нужно, чтобы после выборки определенного диапазона (он реализован, в коде уже), ось "х" на графике присвоила значение "TimeValue", а ось y значение "CurrValue". Понятно что для передачи данных на ось нужен параметр типа ".$row.TimeValue.", я его вставил в коде (вы его там найдет в контейнере), но график не строится.

Подскажите как (может я не в правильном формате пишу параметр) и куда вставить требуемый (или нужный) параметр, для того чтобы ось "х" приняла значение "TimeValue".

Загрузить источник  GeSHi: PHP
  1. <?php
  2. $ots2 = $_POST['dat_ots2'];
  3. $dos2 = $_POST['dat_dos2'];
  4. //SQL connect
  5. $host ='*****';
  6. $login ='*****';
  7. $password ='*****';
  8. //Константы для подключения к СУБД
  9. $link = mssql_connect($host, $login, $password) OR DIE ("Не могу создать соединение ");
  10. mssql_select_db('monitoring') or die ("Не могу выбрать базу данных ");
  11. $q_T_ylic = mssql_query("SELECT * FROM ValueOPC WHERE (Kod_ItemOPC=213) AND (TimeValue >= CONVERT(DATETIME, '2014-06-04 11:00:00', 102) AND TimeValue <= CONVERT(DATETIME, '2014-06-04 11:10:00', 102)) ");
  12. ?>
  13. <!DOCTYPE HTML>
  14. <html>
  15. <head>
  16. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  17. <title>Highcharts Example</title>
  18.  
  19. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
  20. <script type="text/javascript">
  21. $(function () {
  22. $('#container').highcharts({
  23. xAxis: {
  24. categories: [<?php echo($row["TimeValue"]);?>]
  25. },
  26. yAxis: {
  27. title: {
  28. text: 'Temperature (°C)'
  29. },
  30. plotLines: [{
  31. value: 0,
  32. width: 1,
  33. color: '#808080'
  34. }]
  35. },
  36. tooltip: {
  37. valueSuffix: ' °C'
  38. },
  39. series: [{
  40. name: ' ',
  41. data: [<?php echo($row["CurrValue"]);?>]
  42. }]
  43. });
  44. });
  45. </script>
  46. </head>
  47. <body>
  48. <script src="js/highcharts.js"></script>
  49. <script src="js/modules/exporting.js"></script>
  50.  
  51. <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
  52.  
  53. </body>
  54. </html>
Добавлено за 0.025 секунд, используя GeSHi 1.0.8.10


При таков виде, график не строится, как будто нет данных...
Изменил(а) Sup38, 04.06.2014 03:20
 
Rush
а их и нет) покажи мне где ты передаешь данные графику
x1
 
Web
Sup38
Загрузить источник  GeSHi: PHP
  1. xAxis: {
  2. categories: [<?php echo($row["TimeValue"]);?>]
  3. },
  4. yAxis: {
  5. series: [{
  6. name: ' ',
  7. data: [<?php echo($row["CurrValue"]);?>]
  8. }
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10

Разве тут нет их ? (а именно):
Для х - <?php echo($row["TimeValue"]);?>
Для y - <?php echo($row["CurrValue"]);?>


Оффтопик Да и rush, я вроде писал, что если что то не то указал, то подскажите что требуется указать. А не вопросом на вопрос отвечать. Зайдя на сайт и увидев ответ в теме, обрадовался, думаю помогли, ага фига лысого, начинается показывания что кто то умнее и все, а подсказать просто не может, вот и встает вопрос, а на столько ли ты умен, как выдаешь себя ?!


Объединено 05.06.2014 01:34:
Пробовал по другому:
Добавил после выборки параметров (запрос в SQL), команду:
Загрузить источник  GeSHi: PHP
  1. while($row = mssql_fetch_assoc($q_T_ylic)) {
  2. $t1 .= "".$row['TimeValue']."";
  3. $t2 .= "".$row['CurrValue']."";
  4. }
Добавлено за 0.018 секунд, используя GeSHi 1.0.8.10



А в функции построения графика, переписал так:
Загрузить источник  GeSHi: PHP
  1.  
  2. <script type="text/javascript">
  3. $(function () {
  4. $('#container').highcharts({
  5. xAxis: {
  6. categories: [<?php echo $t1;?>]
  7. },
  8. yAxis: {
  9. title: {
  10. text: 'Temperature (°C)'
  11. },
  12. plotLines: [{
  13. value: 0,
  14. width: 1,
  15. color: '#808080'
  16. }]
  17. },
  18. tooltip: {
  19. valueSuffix: ' °C'
  20. },
  21. series: [{
  22. name: ' ',
  23. data: [<?php echo $t2;?>]
  24. }]
  25. });
  26. });
  27. </script>
  28.  
  29.  
  30.  
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10



Но, успехом тоже не увенчалось.
Попытки продолжаются.
Изменил(а) Sup38, 05.06.2014 01:34
 
Rush
http://jsfiddle.n...
твой же пример. проверяй свои данные
x1 x1
 
Web
Sup38
Rush написал:

http://jsfiddle.n...
твой же пример. проверяй свои данные


Ты прикидываешься или как ? Где я тебе там возьму связь с БД которая не имеет доступа в глобальную сеть ?!

Там, если ты не заметил, сразу написаны данные, а мне надо данные из БД перенаправить в график. Странные у тебя ответы пока идут.
 
spiker
Попробуй так

Загрузить источник  GeSHi: PHP
  1. $q_T_ylic = <...>
  2.  
  3. $t1 = array();
  4. $t2 = array();
  5.  
  6. while($row = mssql_fetch_assoc($q_T_ylic)) {
  7. $t1[] = "'".$row['TimeValue']."'";
  8. $t2[] = "'".$row['CurrValue']."'";
  9. }
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10


Ну а в яву вставь
Загрузить источник  GeSHi: Javascript
  1. <...>
  2. xAxis: {
  3. categories: [<?php echo join(",", $t1);?>]
  4. }
  5. <...>
Добавлено за 0.001 секунд, используя GeSHi 1.0.8.10


Наверно тут и ковычки не нужны, думаю будет работать, т.е.
Скачать исходники  Код
    $t1[] = $row['TimeValue'];
    $t2[] = $row['CurrValue'];



Изменил(а) spiker, 06.06.2014 06:59
x1
 
Sup38
spiker написал:

Попробуй так

Загрузить источник  GeSHi: PHP
  1. $q_T_ylic = <...>
  2.  
  3. $t1 = array();
  4. $t2 = array();
  5.  
  6. while($row = mssql_fetch_assoc($q_T_ylic)) {
  7. $t1[] = "'".$row['TimeValue']."'";
  8. $t2[] = "'".$row['CurrValue']."'";
  9. }
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10


Ну а в яву вставь
Загрузить источник  GeSHi: Javascript
  1. <...>
  2. xAxis: {
  3. categories: [<?php echo join(",", $t1);?>]
  4. }
  5. <...>
Добавлено за 0.001 секунд, используя GeSHi 1.0.8.10


Наверно тут и ковычки не нужны, думаю будет работать, т.е.
Скачать исходники  Код
    $t1[] = $row['TimeValue'];
    $t2[] = $row['CurrValue'];




Без кавычек ага работает.

При таком формате написания, форма графика видна, при этом дату он берет каждое число (каждую цифру, скажем 2014 год, то он возьмет 2, 0, 1, 4) отдельным сектором на графике, а значений по "y" так и нет =(
Sup38 присоединено следующее:изображение:
1402035934.png
 
spiker
А в базе то что? Может там значения с десятичными дробями?
Судя по картинке не год делится а выводится полная дата (час, мин, сек).

echo $row['TimeValue']."---";
echo $row['CurrValue']."<br />";

сделай, посмотри что там в базе.
 
Rush
Sup38 написал:

Rush написал:

http://jsfiddle.n...
твой же пример. проверяй свои данные


Ты прикидываешься или как ? Где я тебе там возьму связь с БД которая не имеет доступа в глобальную сеть ?!

Там, если ты не заметил, сразу написаны данные, а мне надо данные из БД перенаправить в график. Странные у тебя ответы пока идут.


я тебя и не просил туда свою бд подключать, я тебе показал что твой пример рабочий, проблема в твоих данных.
какие вопросы, такие и ответы. почитал бы для начала немного теории
x1
 
Web
Sup38

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


Да ладно, я как будто сам не в курсе что пример сам рабочий, ибо изначально там идет рабочий пример (скачай и глянь движок графиков).



Данные в БД идут из ряда 13,2; 14,2; 15 и т.п. Значения температуры уличной.


А в базе то что? Может там значения с десятичными дробями?
Судя по картинке не год делится а выводится полная дата (час, мин, сек).

echo $row['TimeValue']."---";
echo $row['CurrValue']."<br />";


Попробуем... Посмотрим...

Объединено 09.06.2014 02:02:
spiker написал:

А в базе то что? Может там значения с десятичными дробями?
Судя по картинке не год делится а выводится полная дата (час, мин, сек).

echo $row['TimeValue']."---";
echo $row['CurrValue']."<br />";

сделай, посмотри что там в базе.



Вот есть код на вывод в табл. результаты.

Загрузить источник  GeSHi: PHP
  1. <html>
  2. <link rel="stylesheet" href="sup.css" type="text/css">
  3. </html>
  4. <?php
  5. $ots = $_POST['dat_ots'];
  6. $dos = $_POST['dat_dos'];
  7. //SQL connect
  8. $host ='*****';
  9. $login ='****';
  10. $password ='******';
  11. //Константы для подключения к СУБД
  12. $link = mssql_connect($host, $login, $password) OR DIE ("Не могу создать соединение ");
  13. mssql_select_db('monitoring') or die ("Не могу выбрать базу данных ");
  14. $q_T_ylic = mssql_query("SELECT * FROM ValueOPC WHERE (Kod_ItemOPC=213) AND (TimeValue >= CONVERT(DATETIME, '$ots', 102) AND TimeValue <= CONVERT(DATETIME, '$dos', 102)) ");
  15. $table = "<table align=center>";
  16. $table .= "<tr >";
  17. $table .= "<th> Дата и время </th>";
  18. $table .= "<th>Значение </th>";
  19. $table .= "</tr >";
  20. while($row = mssql_fetch_assoc($q_T_ylic)) { //цикл
  21. $table .= "<tr >";
  22. $table .= "<td ><center>".$row['TimeValue']." </center></td>";
  23. $table .= "<td ><center>".$row['CurrValue']." <sup>o</sup>C</center></td>";
  24. $table .= "</tr>";
  25. }
  26. $table .= "</table>";
  27. echo $table /*(date("d.m.Y", strtotime(TimeValue)))*/ ;
  28. ?>
Добавлено за 0.026 секунд, используя GeSHi 1.0.8.10



Вот результат, скажем за период 09.06.2014 9:30:00 до 09.06.2014 9:35:00
rusfusion.ru/forum/attachments/1402275770.png


А вот просто вывод spiker, как ты просил:

Код:
Загрузить источник  GeSHi: PHP
  1. <?php
  2. //SQL connect
  3. $host ='TEC11-ARMPTO';
  4. $login ='pto';
  5. $password ='monitoring';
  6. //Константы для подключения к СУБД
  7. $link = mssql_connect($host, $login, $password) OR DIE ("Не могу создать соединение ");
  8. mssql_select_db('monitoring') or die ("Не могу выбрать базу данных ");
  9. $q_T_ylic = mssql_query("SELECT * FROM ValueOPC WHERE (Kod_ItemOPC=213) AND (TimeValue >= CONVERT(DATETIME, '2014-06-09 09:30:00', 102) AND TimeValue <= CONVERT(DATETIME, '2014-06-09 09:35:00', 102)) ");
  10. while($row = mssql_fetch_assoc($q_T_ylic)) {
  11. echo $row['TimeValue']."---";
  12. echo $row['CurrValue']."<br />";
  13. }
  14. ?>
  15.  
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10



Результат (за такую же дату период)
rusfusion.ru/forum/attachments/2_3.png


Код
Загрузить источник  GeSHi: PHP
  1. while($row = mssql_fetch_assoc($q_T_ylic))
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10


Важен, он задает цикл, без него данные не выводятся.
Sup38 присоединено следующее:изображения:
2_3.png 1402275770.png

Изменил(а) Sup38, 09.06.2014 02:14
 
spiker
http://dfiles.ru/.../tx0xmg1m9 - рабочий пример с твоими данными.

Что нужно сделать - всё-таки заключить в кавычки дату, ну и "форматнуть" её до приглядного вида, зачем эти секунды...
Загрузить источник  GeSHi: PHP
  1. $t1[] = "'".date('d.m.Y H:i', strtotime($row['TimeValue']))."'";
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10
x1 x1 x1 x1 x1 x1
 
Sup38
spiker написал:

http://dfiles.ru/.../tx0xmg1m9 - рабочий пример с твоими данными.

Что нужно сделать - всё-таки заключить в кавычки дату, ну и "форматнуть" её до приглядного вида, зачем эти секунды...
Загрузить источник  GeSHi: PHP
  1. $t1[] = "'".date('d.m.Y H:i', strtotime($row['TimeValue']))."'";
Добавлено за 0.023 секунд, используя GeSHi 1.0.8.10


Сразу спасибо тебе огромное.

По делу, взял от твоего примера код из index.php:

Загрузить источник  GeSHi: Javascript
  1.  
  2. $(function () {
  3. $('#container').highcharts({
  4. title: {
  5. text: 'Monthly Average Temperature',
  6. x: -20 //center
  7. },
  8. subtitle: {
  9. text: 'Source: WorldClimate.com',
  10. x: -20
  11. },
  12. xAxis: {
  13. categories: [<?php echo join(",", $t1);?>]
  14. },
  15. yAxis: {
  16. title: {
  17. text: 'Temperature (°C)'
  18. },
  19. plotLines: [{
  20. value: 0,
  21. width: 1,
  22. color: '#808080'
  23. }]
  24. },
  25. tooltip: {
  26. valueSuffix: '°C'
  27. },
  28. legend: {
  29. layout: 'vertical',
  30. align: 'right',
  31. verticalAlign: 'middle',
  32. borderWidth: 0
  33. },
  34. series: [{
  35. name: 'Tokyo',
  36. data: [<?php echo join(",", $t2);?>]
  37. }
  38. ]
  39. });
  40. });
  41.  
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10


вставив в свой и о, график построился как надо. Но сижу тебе всматриваюсь, в чем загвозка то ? При этом варианте, просто был белый лист, щас буду искать этот волшебный параметр.
Вот мой старый код:
Загрузить источник  GeSHi: Javascript
  1.  
  2. $(function () {
  3. $('#container').highcharts({
  4. xAxis: {
  5. categories: ['<?php echo join(",", $t1);?>']
  6. },
  7.  
  8. yAxis: {
  9. min: 0,
  10. type: 'linear',
  11. title: {
  12. text: 'Temperature (°C)'
  13. },
  14. plotLines: [{
  15. value: 0,
  16. width: 1,
  17. color: '#808080'
  18. }]
  19. },
  20. tooltip: {
  21. valueSuffix: ' °C'
  22. },
  23. series: [{
  24. name: ' ',
  25. data:[ '<?php echo join(",", $t2);?>']
  26. }]
  27. });
  28. });
  29.  
Добавлено за 0.002 секунд, используя GeSHi 1.0.8.10
 
spiker
Ну вот.
Помог хорошему человеку с погодой, и к нам в Сибирь тепло пришло наконец-то.
 
Sup38
spiker написал:

Ну вот.
Помог хорошему человеку с погодой, и к нам в Сибирь тепло пришло наконец-то.


Ну я и сам не с юга =))).
 
spiker
Моё мнение — графики полезны для сравнения чего-то с чем-то.
Например погода за определенный период в сравнении с прошлым годом.
А так.. не знаю. Я бы ограничился только выводом в таблице.
 

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум: