Формирования данных из бд для графика

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 23 марта 2014 в 18:01
Хочу построить график по данным из бд. Для формирования данных пытаюсь использовать следующий php код.
Таблица cms_user_param в ней столбцы id, user_id, p_date, parameters. Столбец parameters имеет значения в формате yaml(он дублирует значения formsdata из cms_user_profiles)

  1. public static function getGraphData($user_id){
  2.  
  3. $inDB = cmsDatabase::getInstance();
  4. $inUser = self::getInstance();
  5.  
  6. $sql = "SELECT p_date, parameters FROM cms_user_param WHERE user_id = '$user_id' ORDER BY id";
  7. $result = $inDB->query($sql);
  8. $i=0;
  9. if ($inDB->num_rows($result)){
  10. while ($row = mysql_fetch_assoc($result)) {
  11. $p_date[i] = $row["p_date"];
  12. $parameters[i] = cmsCore::yamlToArray($row["parameters"]);
  13. $i++;
  14. }
  15. } else {return false;}
  16.  
  17. return array(
  18. 'p_date' => $p_date,
  19. 'parameters' => $parameters);
  20. }
На работоспособность ещё не пробывал так как ещё в формировании графика много нужно сделать. Вопрос такой я с этими многомерными массивами не накосячил? Ведь $parameters и так массив а в него кладется массив преобразованный из yaml. А потом весь $parameters возвращается функцией в составе массива?
#2 23 марта 2014 в 18:33

А потом весь $parameters возвращается функцией в составе массива?

Dmitriy
да
#3 23 марта 2014 в 18:45


А потом весь $parameters возвращается функцией в составе массива?

Dmitriy
да

Димитриус

Что "да", нагородил с массивами и ничего не получится, или все хорошо и я дальше смогу работать с этими значениями?
#4 23 марта 2014 в 20:41
Можно как то так:
  1.  
  2. $inDB = cmsDatabase::getInstance();
  3.  
  4. $data = array();
  5. $i=0;
  6.  
  7. $sql = "SELECT p_date, parameters FROM cms_user_param WHERE user_id = '$user_id' ORDER BY id";
  8. $result = $inDB->query($sql);
  9.  
  10. if ($inDB->num_rows($result)){
  11. while ($row = $inDB->fetch_assoc($result)) {
  12. $data[i]["p_date"] = $row["p_date"]
  13. $data[i]["parameters"] = cmsCore::yamlToArray($row["parameters"]);
  14. $i++;
  15. }
  16. } else {return false;}
  17.  
  18. return $data;
  19.  
Вроде бы правильно, должно работать :=)
#5 23 марта 2014 в 20:52
Марат, получается, если я захочу обратиться к 2 записи "подмассива" parameters из 1 записи таблицы то нужно писать что-то вроде
  1. $data[1][parameters][2]
?
#6 23 марта 2014 в 22:26

то нужно писать что-то вроде?

Dmitriy
Да
#7 24 марта 2014 в 15:04


то нужно писать что-то вроде?

Dmitriy
Да

Марат

Чё т не пойму. Не выводит никакие значение, даже просто на страницу. Разместил эту функцию в файле user.class.php,
присвоил значение переменной
  1. $graph = cmsUser::getGraphData($usr['id']);
в файле frontend.php, вызываю значение переменной $graph[1][parameters][1] в файле com_user_profile.tpl. Результата никакого? С размещением вызова функции я ошибся или где?
#8 30 марта 2014 в 19:42
Такс… значения $graph в cms_user_profiles.tpl передаются, но не отображаются. Вызываю их так {$graph.1.p_date}. Из режима отладки вижу, что запрос к бд делается успешно. При таком же запросе просто из phpmyadmin выдает 4 строки.

В чем же проблема? Помогите, люди!
#9 1 апреля 2014 в 21:12
Ребят, ну не ужели никто помочь не может?
#10 1 апреля 2014 в 22:44

в файле frontend.php, вызываю значение переменной $graph[1][parameters][1] в файле com_user_profile.tpl. Результата никакого?

Dmitriy

в php
  1. assign->( 'graph', $graph );
в смарти
  1. {$graph[1][parameters][1]}
соответственно в массиве parameters должен присутствовать цифровой индекс 1.

что у вас возвращает переменная или функция всегда можно проверить в самом коде php
  1.  
  2. echo '<pre>';
  3. print_r( $test_var );
  4. echo '</pre>';
  5.  
#11 1 апреля 2014 в 22:46
так же в смарти можно использовать смешанную нотацию если встречаются цифровые ключи
  1.  
  2. {$graph[1].parameters[1]}
  3.  
#12 2 апреля 2014 в 10:39
Если user_id = '$user_id' уникальное значение в таблице вам не нужно прогонять результат в цикле и усложнять топологию (мерность) массива

  1.  
  2. function get_user_params( $user_id ){
  3.  
  4. $inDB = cmsDatabase::getInstance();
  5.  
  6. $sql = "SELECT p_date, parameters FROM cms_user_param WHERE user_id = '$user_id';";
  7.  
  8. if ( !$result = $inDB-> query( $sql ) ) { return cmsCore::error404(); };
  9.  
  10. $row = $inDB-> fetch_assoc( $result );
  11. $row['parameters'] = cmsCore::yamlToArray( $row['parameters'] );
  12.  
  13. echo '<pre>';
  14. print_r( $row ); // чтобы проверить что возвращается и с какими ключами
  15. echo '</pre>';
  16.  
  17. return $row;
  18. }
  19.  
#13 2 апреля 2014 в 21:10

Если user_id = '$user_id' уникальное значение в таблице вам не нужно прогонять результат в цикле и усложнять топологию (мерность) массива

• Mike •
Спасибо! Проблема оказалась гораздо проще забыл перед i знак $ доллара поставить. П
  1. echo '<pre>';
  2. print_r( $test_var );
  3. echo '</pre>';
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.