2016-09-26 9 views
1

私は提出されたアンケートのユニークな日付を表示し、大きな、良い、公正または悪い行に回答を配置しようとしています。私はこの問題は、このコードでは何かわからないが、それはあなたが実際にピボットクエリを使用してMySQLに直接これを処理することができ、このmysqlテーブルの二重反復

SurveyDate | Great | Good | Fair | Bad 
2016-09-26 | 34 | 12 | 22 | 5 
2016-08-24 | 10 | 5 | 12 | 3 

<?php 
$w = "select distinct(datetime) from clientsurvey order by datetime desc"; 
$zx = mysql_query($w); 
if (mysql_num_rows($zx) < 1) { 
echo "<tr><td colspan='5' style='text-align:center; color:#ff0000'>No survey records</td></tr>"; 
} 
$great = 0; 
$good = 0; 
$fair = 0; 
$bad = 0; 
while ($z = mysql_fetch_array($zx)) { 
    $uniquedate = $z['datetime']; 
    $xx = "select * from clientsurvey where datetime like '%$uniquedate%'"; 
    $zz = mysql_query($xx); 
    while ($zx = mysql_fetch_array($zz)) { 
     $clientrating = $zx['clientrating']; 
     $datetime = $zx['datetime']; 
     if ($clientrating === "Bad") { 
     $bad++; 
     } 
     if ($clientrating === "Fair") { 
     $fair++; 
     } 
     if ($clientrating === "Good") { 
     $good++; 
     } 
     if ($clientrating === "Great") { 
     $great++; 
     } 
    } 
    echo "<tr><td>$uniquedate</td><td>$great</td><td>$good</td><td>$fair</td><td>$bad</td></tr>"; 
$great = 0; 
$good = 0; 
$fair = 0; 
$bad = 0; 
} 
?> 

答えて

3

ようonly.Something最新の日付を返します。

SELECT datetime AS SurveyDate, 
     SUM(CASE WHEN clientrating = 'Great' THEN 1 END) AS Great, 
     SUM(CASE WHEN clientrating = 'Good' THEN 1 END) AS Good, 
     SUM(CASE WHEN clientrating = 'Fair' THEN 1 END) AS Fair, 
     SUM(CASE WHEN clientrating = 'Bad' THEN 1 END) AS Bad 
FROM clientsurvey 
GROUP BY datetime 

PHPコード:

$query = "SELECT datetime AS SurveyDate,". 
     "SUM(CASE WHEN clientrating = 'Great' THEN 1 END) AS Great,". 
     "SUM(CASE WHEN clientrating = 'Good' THEN 1 END) AS Good,". 
     "SUM(CASE WHEN clientrating = 'Fair' THEN 1 END) AS Fair,". 
     "SUM(CASE WHEN clientrating = 'Bad' THEN 1 END) AS Bad". 
     "FROM clientsurvey". 
     "GROUP BY datetime"; 
$result = mysql_query($query); 
echo "datetime, bad, fair, good, great"; 
while ($row = mysql_fetch_array($result)) { 
    $datetime = $row['datetime']; 
    $bad  = $row['Bad']; 
    $fair  = $row['Fair']; 
    $good  = $row['Good']; 
    $great = $row['Great']; 
    echo $datetime.", ".$bad.", ".$fair.", ".$good.", ".$great; 
} 
+0

感謝を示唆したように多分あなたはSQLでそれを行う必要があります。計画は、結果をPHPのWebページに表示することです。どのように私はあなたのアプローチでこれについて行きますか? –

+0

@ KayodeAgbede結果セットを繰り返し処理します。各行は、特定の日時の値に対して合計4つのレーティングを持ちます。 –

+0

ありがとうTim。私は私の質問は、どのように私は、フォーマットしたり、操作することができますphp変数に良い、良い、公正、悪いの各出力を結び付けるかどうかですね? –

0

私はあなたのコードの残りの部分を見ていませんでしたが、これは複数の日付のために働く必要があります。

<?php 
$w = "select distinct(datetime) from clientsurvey order by datetime desc"; 
$zx = mysql_query($w); 
if (mysql_num_rows($zx) < 1) { 
echo "<tr><td colspan='5' style='text-align:center; color:#ff0000'>No survey records</td></tr>"; 
} 
$great = 0; 
$good = 0; 
$fair = 0; 
$bad = 0; 
while ($z = mysql_fetch_array($zx)) { 
$uniquedate = $z['datetime']; 
$xx = "select * from clientsurvey where datetime like '%$uniquedate%'"; 
$zz = mysql_query($xx); 
while ($zx = mysql_fetch_array($zz)) { 
     $clientrating = $zx['clientrating']; 
    $datetime = $zx['datetime']; 
    if ($clientrating === "Bad") { 
    $bad++; 
    } 
    if ($clientrating === "Fair") { 
    $fair++; 
    } 
    if ($clientrating === "Good") { 
    $good++; 
    } 
    if ($clientrating === "Great") { 
    $great++; 
    } 
        echo "<tr><td>$uniquedate</td><td>$great</td><td>$good</td><td>$fair</td><td>$bad</td></tr>"; 

$great = 0; 
$good = 0; 
$fair = 0; 
$bad = 0; 
} 

}?> 

しかし、他の誰かがティム