0

割り当てられたすべてのタスクのうち、生徒が完了したタスクの数を基本的に表示する円グラフを作成したいと思います。タスクのテーブルは次のようになります

タスクtask_id| task_student_id | task_status

* task_student_id *は、studentsテーブルの*user_id*を参照します

したがって、user_idを持つ学生のサンプルデータがタスクテーブルで次のようになっているとします。

task_id | task_student_id | task_status16完了26完了36not_complete 4 6 not_complete56完了

したがって、この生徒の円グラフには、完了したタスクと完了していないタスクの数、またはパーセンテージ(つまり、40%が完了していない60%が完了している)のいずれかを表示する必要があります。

オンラインでチュートリアルを見つけました。2つのphpファイルがあります。最初のファイルでは、studentsテーブルからuser_idを選択できます。

<html>
<head>
  <!--Load the AJAX API-->
  <script type="text/javascript" src="http://www.google.com/jsapi"></script>
  <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
  <script type="text/javascript">

  // Load the Visualization API and the piechart,table package.
  google.load('visualization', '1', {'packages':['corechart','table']});

  function drawItems(num) {
    var jsonPieChartData = $.ajax({
      url: "getpiechartdata.php",
      data: "q="+num,
      dataType:"json",
      async: false
    }).responseText;

    var jsonTableData = $.ajax({
      url: "gettabledata.php",
      data: "q="+num,
      dataType:"json",
      async: false
    }).responseText;

    // Create our data table out of JSON data loaded from server.
    var piechartdata = new google.visualization.DataTable(jsonPieChartData);
    var tabledata = new google.visualization.DataTable(jsonTableData);

    // Instantiate and draw our pie chart, passing in some options.
    var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
    chart.draw(piechartdata, {
      width: 700,
      height: 500,
      chartArea: { left:"5%",top:"5%",width:"90%",height:"90%" }
    });

    // Instantiate and draw our table, passing in some options.
    var table = new google.visualization.Table(document.getElementById('table_div'));
    table.draw(tabledata, {showRowNumber: true, alternatingRowStyle: true});
  }

  </script>
</head>
<body>
  <form>
  <select name="users" onchange="drawItems(this.value)">
  <option value="">Select a student:</option>
  <?php
    $dbuser="";
    $dbname="";
    $dbpass="";
    $dbserver="";
    // Make a MySQL Connection
    mysql_connect($dbserver, $dbuser, $dbpass) or die(mysql_error());
    mysql_select_db($dbname) or die(mysql_error());
    // Create a Query
    $sql_query = "SELECT user_id, user_name FROM students";
    // Execute query
    $result = mysql_query($sql_query) or die(mysql_error());
    while ($row = mysql_fetch_array($result)){
    echo '<option value='. $row['user_id'] . '>'. $row['user_name'] . '</option>';
    }
    mysql_close($con);
  ?>
  </select>
  </form>
  <div id="chart_div"></div>
  <div id="table_div"></div>
</body>
</html>

次に、2番目のphpファイルが、選択されたuser_idに基づいてグラフに入力されます

<?php
  $q=$_GET["q"];

  $dbuser="";
  $dbname="";
  $dbpass="";
  $dbserver="";

  $sql_query = "SELECT task_status, COUNT(*) FROM tasks
    WHERE  task_student_id=" . $q . ""

  $con = mysql_connect($dbserver,$dbuser,$dbpass);
  if (!$con){ die('Could not connect: ' . mysql_error()); }
  mysql_select_db($dbname, $con);

  $result = mysql_query($sql_query);

    $data = array('cols' => array(array('label' => 'Not completed', 'type' => 'string'),
                              array('label' => 'Completed', 'type' => 'string')),
              'rows' => array());

    while($row = mysql_fetch_row($result)) {
   $data['rows'][] = array('c' => array(array('v' => $row[0]), array('v' => $row[1])));
}    

echo json_encode($data);



  mysql_close($con);
?>

配列とクエリで何か問題が発生していると確信しています。また、2つの別々のSQLクエリを作成し、それらを2つのphp変数に保存することを考えていました。$ not_completed、$ completeを実行し、グラフに入力します。どちらが私の質問に最適なオプションかわかりません。誰か助けてもらえますか?

4

1 に答える 1

0

https://developers.google.com/chart/を見て、Google チャートのドキュメントを見つけてください。$complete と $not_complete の両方の変数が既にある場合は、この例http://pastebin.com/qsB0hqmJを使用でき、mysql_result を使用して mysql/php コードを改善する必要があります。

$tasks_completed = mysql_result(mysql_query("SELECT COUNT(*) FROM tasks..."),0);
于 2013-03-24T01:33:51.050 に答える