2016-08-16 9 views
0

お時間をいただきありがとうございます。 私は2つの質問があり、私はこれで非常に新しいです。PHP MySQLカウントIFチャートと列/行からデータを取り出す

私が達成しようとしているのは、osticketデータベースからデータを取得し、Googleグラフに円グラフを表示させることです。私は、データを取得するコードを取得することができますが、それはほとんどの列のための罰金ですが、すべての行を引っ張っているが、 "isoverdue" 1つの列の場合は、行= 1です。 ifステートメントを追加するにはいくつかの異なる方法がありますが、それらは常にMySQLエラーに失敗します。

私が抱えている2番目の問題は、動的に更新するGoogleコードを取得する方法です。私はそれをプルからの結果でハードにコード化しましたが、どうやって作ることができるのだろうかと疑問に思っています。おそらく私は新しい変数を必要とするので、カウントを合計しますか?

<?php 
$servername = "localhost"; 
$username = ""; 
$password = ""; 
$db = ""; 
$dbh = new PDO("mysql:host=$servername;dbname=$db", $username, $password); 

// Create connection 
$conn = new mysqli($servername, $username, $password, $db); 
// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 
foreach($dbh->query('SELECT COUNT(created) FROM ost_ticket') as $opened); 
foreach($dbh->query('SELECT COUNT(closed) FROM ost_ticket') as $closed1); 
foreach($dbh->query('SELECT COUNT(isoverdue) FROM ost_ticket') as $overdue); 

echo "<tr>"; 
echo "<td>".$opened['COUNT(created)']."</td>", "<td>".$closed1['COUNT(closed)']."</td>", "<td>" .$overdue['COUNT(isoverdue)']."</td>"; 
echo "</tr>"; 

?> 


<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([ 
     ['Status', 'Hours per Day'], 
     ['Opened', 8], 
     ['Closed', 5], 
     ['Overdue', 3], 

    ]); 

    var options = { 
     title: 'My Daily Activities' 
    }; 

    var chart = new google.visualization.PieChart(document.getElementById('piechart')); 

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

もう一度この点を確認していただきありがとうございます。 isoverdueため

答えて

0

CASE声明を試してみてください...

SUM(CASE WHEN isoverdue = 1 THEN 1 ELSE 0 END)

また、あなたが同じ文に含めることができるはず、
ので、クエリは2つの余分な時間を実行していません。 ..

SELECT 
    COUNT(created) as created, 
    COUNT(closed) as closed, 
    SUM(CASE WHEN isoverdue = 1 THEN 1 ELSE 0 END) as isoverdue 
FROM 
    ost_ticket 

あなたも値

を取得するために名前を使用し、その後、 asオペレータのフィールドに名前を付けることができます
foreach($dbh->query(...) as $results); 
$results['created'] 
+0

、その後、Googleのチャートに渡さAJAXから呼び出されるPHPビルドJSONオブジェクトを有するお勧め[データテーブル](https://developers.google.com/chart/interactive/docs/この[最近の回答](http://stackoverflow.com/a/38955110/5090771)に似た参照#constructor_1) – WhiteHat

+0

チケットが実際に閉じられるまで、閉じた列がNULLの場合、それは機能します。 'COUNT()'はヌルでない行だけをカウントするので、 'NULL(NULL)でない可能性が高い' COUNT(作成済み) 'とは異なります。 – GentlemanMax

+0

ありがとう、100%は確かではありません... – WhiteHat

0

@WhiteHat、あなたの情報のオフに基づいて

は、私は次のように適用し、それが働いています。今私はGoogleのグラフに解析を把握する必要があります。和の問題を助けてくれてありがとう。他の誰かが同様の問題を抱えている場合、自分のコードを追加しました。 _update dynamically_用として

foreach($dbh->query('SELECT COUNT(created) FROM ost_ticket') as $opened); 
foreach($dbh->query('SELECT COUNT(closed) FROM ost_ticket') as $closed1); 
foreach($dbh->query('SELECT SUM(isoverdue) FROM ost_ticket') as $overdue) 

echo "<tr>"; 
echo "<td>".$opened['COUNT(created)']."</td>", "<td>".$closed1['COUNT(closed)']."</td>", "<td>".$overdue['SUM(isoverdue)']."</td>"; 
echo "</tr>"; 
+0

素晴らしい、_update dynamically_partはかなり簡単です。おそらくコードを別々のファイルに分けるほうが簡単でしょう。お困りの場合は教えてください... – WhiteHat

+0

ありがとうございます。私は少し問題がありますが、あなたが参照したリンクを見ています。私はdbconnectファイルを作成し、それを残りのファイルから分離しました。私は自分のcount.phpからgoogleコードを削除しているので、それ自身でもリンクごとにGoogleのデータ作業をしようとします。 – 829

関連する問題