2011-12-29 8 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; 
    } 

} 
?> 

問題は、ループが最初のユーザーのデータの大部分をスキップし、テーブルに最後の2つの列がないことです。 http://65.242.11.205/leaderboard/

が、私は通常、ネストされたループを把握することができますが、これは私が麻痺しています

あなたはここで結果を見ることができます。

+0

$ TOTAL_CHALLENGES_CTは何ですか? –

+0

あなたのリンクは機能せず、正確に何を表示しようとしていますか、テーブルのすべてのデータですか? –

答えて

0

最初の$ currentUserIdを設定していないようです。そして、それはジョインに関係しているかもしれないが、SQLが設計されているので、私が精緻化したSQLを見てみると助けになるだろう。

関連する問題