2011-12-29 79 views
0

我的同事已经把一个SQL选择输出以下的数组:MySQL的多个行,嵌套循环

  Array 
      (
            [0] => Array 
              (
            [total_completion_time] => 163 
            [promotion_id] => 1 
            [challenge_id] => 1 
            [userId] => 2 
            [display_name] => laxadmin 
            [completion_time] => 163 
            [completion_time_mins] => 0 
            [completion_time_secs] => 0 
            [completion_time_mmss] => 0:0 
            [score] => 40 
      ) 

    [1] => Array 
      (
            [total_completion_time] => 345 
            [promotion_id] => 1 
            [challenge_id] => 1 
            [userId] => 1 
            [display_name] => siteadmin 
            [completion_time] => 345 
            [completion_time_mins] => 5 
            [completion_time_secs] => 45 
            [completion_time_mmss] => 5:45 
            [score] => 50 
      ) 

    [2] => Array 
      (
            [total_completion_time] => 345 
            [promotion_id] => 1 
            [challenge_id] => 1 
            [userId] => 3 
            [display_name] => mdeville 
            [completion_time] => 345 
            [completion_time_mins] => 0 
            [completion_time_secs] => 0 
            [completion_time_mmss] => 0:0 
            [score] => 0 
      ) 

    [3] => Array 
      (
            [total_completion_time] => 943 
            [promotion_id] => 1 
            [challenge_id] => 1 
            [userId] => 4 
            [display_name] => Matthew DeVille 
            [completion_time] => 163 
            [completion_time_mins] => 2 
            [completion_time_secs] => 43 
            [completion_time_mmss] => 2:43 
            [score] => 90 
      ) 

    [4] => Array 
      (
            [total_completion_time] => 943 
            [promotion_id] => 1 
            [challenge_id] => 3 
            [userId] => 4 
            [display_name] => Matthew DeVille 
            [completion_time] => 90 
            [completion_time_mins] => 1 
            [completion_time_secs] => 30 
            [completion_time_mmss] => 1:30 
            [score] => 30 
      ) 

    [5] => Array 
      (
            [total_completion_time] => 943 
            [promotion_id] => 1 
            [challenge_id] => 4 
            [userId] => 4 
            [display_name] => Matthew DeVille 
            [completion_time] => 90 
            [completion_time_mins] => 1 
            [completion_time_secs] => 30 
            [completion_time_mmss] => 1:30 
            [score] => 35 
      ) 

    [6] => Array 
      (
            [total_completion_time] => 943 
            [promotion_id] => 1 
            [challenge_id] => 5 
            [userId] => 4 
            [display_name] => Matthew DeVille 
            [completion_time] => 300 
            [completion_time_mins] => 5 
            [completion_time_secs] => 0 
            [completion_time_mmss] => 5:0 
            [score] => 30 
      ) 

    [7] => Array 
      (
            [total_completion_time] => 943 
            [promotion_id] => 1 
            [challenge_id] => 6 
            [userId] => 4 
            [display_name] => Matthew DeVille 
            [completion_time] => 300 
            [completion_time_mins] => 5 
            [completion_time_secs] => 0 
            [completion_time_mmss] => 5:0 
            [score] => 20 
      ) 

他还通过的结果提供了以下的代码来循环和用下列标题创建表格:

user | 挑战1次| 挑战2次| 挑战3次| 挑战4次| 挑战5次| 挑战6次| 挑战7次| 总时间|

<?php 
for ($x=0; $x < $results_length; $x++) { 
    $row = $results[$x]; // get next row from results 
    $userId = $row["userId"]; // get userId from row 

    // by default, we'll expect to continue to build UI display for current user 
    $beginNewUserDisplay = false; 

    if ($userId !== $currentUserId) { 
     // if not first user, we need to close the current table row 
     if ($currentUserId != -1) { 
     // if we haven't filled in one table cell for each possible result 
      // do that now... 
      while ($challengesCtr <= $TOTAL_CHALLENGES_CT) { 
       // this means we're missing results we need 
       // to properly display the table so we add in blank cells 
       echo "<td></td>"; 
       $challengesCtr = $challengesCtr+1; 
      } 

      // display total time 
      // TODO: verify this is the correct display value 
      echo "<td>".$row["total_completion_time"]. "-" .$row['userId']."</td>"; 
      echo "</tr>"; 
     } 

    // Regardless, we need to start a new table row 
    // no more results for previous user, starting UI display for new user 
    $currentUserId = $userId; 
    $beginNewUserDisplay = true; 

    // reset the results counter 
    $challengesCtr = 1; 

    } 



    if ($beginNewUserDisplay == true) { 
     // start UI for new User's results 
     echo "<tr>"; 
     echo "<td>".$row['userId']."</td>"; 
     echo "<td>".$row['display_name']. "-" .$row['userId']."</td>"; 
    } else { 
     // continue UI for current User's results 
     $challengeId = $row["challenge_id"]; 
     while ($challengesCtr < $challengeId) { 
      // if this executes it means we're missing results 
      // we need to properly display the table so we add in blank cells 
      echo "<td></td>"; 
      $challengesCtr = $challengesCtr+1; 
     } 

     // echo table cell current challenge time here 
     // TODO: verify this is the correct display value 
     echo "<td>".$row['completion_time_mmss']."</td>"; 

     // increment our results counter 
     $challengesCtr = $challengesCtr+1; 
    } 

} 
?> 

问题是循环跳过了大部分第一个用户的数据,表中缺少最后两列。

您可以在这里看到的结果:http://65.242.11.205/leaderboard/

我通常可以找出嵌套的循环,但是这其中有我瘫痪。

+0

什么是$ TOTAL_CHALLENGES_CT? – 2011-12-29 23:58:32

+0

您的链接无法正常工作,您正准备尝试显示表格上的所有数据? – 2012-08-10 09:56:18

回答

0

好像你还没有设置第一个$ currentUserId。而且它可以帮助我们很好地查看SQL侦听,因为它可能与连接有关或SQL的设计。