我的同事组合了一个SQL select,输出以下数组:
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
)
)
他还提供了以下代码来循环遍历结果并创建一个具有以下标题的表:
用户|挑战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/
我通常可以找出嵌套循环,但是这个让我束手无策。
似乎你没有设置第一个$currentUserId。它会帮助很多看到SQL我的侦查,因为它可能有一些东西与连接或SQL的设计。