MySql Inner Join не отображает данные в Google Chart - PullRequest
1 голос
/ 25 июня 2019

Я полный новичок и пытаюсь визуализировать опрос, который я провел для менеджеров и соискателей.Я пытаюсь отобразить результаты в виде линейной диаграммы в Google Charts с вводом менеджера и кандидата по оси Y, с темами, которые им задавались по оси X.Я использовал внутреннее объединение, чтобы собрать их ответы в одну таблицу и поместить темы в виде строк, а ответы менеджера и кандидата в виде столбцов.Но он не будет отображать результаты, и я получаю сообщение об ошибке «Неопределенная переменная» при проверке страницы.

      <?php include "db.php";?> 
<html>
  <head>
    <script type="text/javascript" 
src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['experience', 'strengths', 'cultural_fit'],
          <?php
            $query="select p.output, sum(case when r.candname = 'manager' 
then s.answer else 0 end) as Manager, sum(case when r.candname = 
'applicant01' then s.answer else 0 end) as Applicant01 from questions p 
inner join graphtable s on p.q_id = s.q_id inner join applied r on 
s.candidate = r.candidate group by p.output";
            $res=mysqli_query($conn,$query);
            while($data= mysqli_fetch_array($res)){
                $year=$data['experience'];
                $sale=$data['strengths'];
                $expense=$data['cultural_fit'];

          ?>
            ['<?php echo $experience;?>',<?php echo $strengths;?>,<?php 
echo $cultural_fit;?>],
          <?php
               }

          ?>
        ]);

        var options = {
          title: 'Score comparison',
          curveType: 'function',
          legend: { position: 'bottom' }
        };

        var chart = new 
google.visualization.LineChart(document.getElementById('curve_chart'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="curve_chart" style="width: 900px; height: 500px"></div>
  </body>
</html>

У меня есть три таблицы:

  1. применено
candidate | candname
-----------------------
1           manager
2           applicant01
вопросов
q_id      | output
---------------------
1           experience
2           strengths
3           cultural_fit
graphtable (да, я знаю, я ужасно разбираюсь в названиях - работать над этим, пока ранние часы не помогли)
candidate | answer |  q_id
     1        7       1
     1       20       2
     1       14       3
     2        9       1
     2       22       2
     2       18       3

Я очень признателен за любую помощь, которую вы можетепредоставить - заранее спасибо!Особенно благодарен за ответы в самых простых словах!

1 Ответ

0 голосов
/ 25 июня 2019

Вы сводите результаты так, что каждый кандидат находится в отдельном столбце.Но в вашей визуализации вы хотите, чтобы каждый вопрос был столбцом.Таким образом, запрос должен быть:

SELECT a.candname,
       SUM(CASE WHEN q.output = 'experience' THEN g.answer END) AS experience,
       SUM(CASE WHEN q.output = 'strengths' THEN g.answer END) AS strengths,
       SUM(CASE WHEN q.output = 'cultural_fit' THEN g.answer END) AS cultural_fit
FROM questions AS q
JOIN graphtable AS g ON q.q_id = g.q_id
JOIN applied AS a ON a.candidate = g.candidate
GROUP BY g.candidate

Затем вам нужно установить правильные имена переменных после получения:

            while($data= mysqli_fetch_array($res)){
                $candname = $data['candname']
                $experience=$data['experience'];
                $strengths=$data['strengths'];
                $cultural_fit=$data['cultural_fit'];
                echo json_encode([$candname, $experience, $strengths, $cultural_fit]) . ",";
            }
...