dpg78570 2016-09-26 11:51
浏览 77
已采纳

mysql表上的双重迭代

I am trying to display unique dates of submitted surveys and place the response in a great, good, fair or bad row. I'm not sure what the problem is with this code but it returns the most recent date only.Something like this

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;
}
?>
  • 写回答

2条回答 默认 最新

  • dtt3399 2016-09-26 11:55
    关注

    You can actually handle this directly in MySQL using a pivot 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
    

    PHP code:

    $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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)