我想问一下,如何从数据库中的分数表创建排名?例如,数据库表有student_id,course_id,得分。我已经创建了一个PHP代码来获取这些分数并将其作为最终分数累积。然后,我需要创建谁获得第一等级,第二等等。这是我的示例代码:
$q = mysql_query("SELECT * FROM tbstudent");
while($r = mysql_fetch_array($q))
{
$q2 = mysql_query("SELECT * FROM tbscores WHERE student_id = '".$r['student_id']."'");
$total = 0;
while($r2 = mysql_fetch_array($q2))
{
$total += $r2['scores'];
}
echo "<tr><td>$total</td><td>/* for rank*/</td></tr>";
}
所以,我得到了总得分,但是如何获得这些学生的排名?例如,我现在的结果是(姓名,分数,等级):
1. Ryan - 235
2. Jack - 450
3. Dave - 140
4. Levi - 330
5. Kens - 350
我想要的就是这些:
1. Dave - 235 - 4
2. Jack - 450 - 1
3. Levi - 140 - 5
4. Kens - 330 - 3
5. Ryan - 350 - 2
请不要给我答案,使用AVERAGE,SUM等从数据库中获取它,因为我有另一个分数计算。所以任何人都知道如何用PHP创建它?
答案 0 :(得分:2)
这会创建一个存储总计的数组,然后对它们进行排序并将它们显示在列表中。
数组按学生ID编制索引。
$rankingArray = [];
$q = mysql_query("SELECT * FROM tbstudent");
while($r = mysql_fetch_array($q))
{
$q2 = mysql_query("SELECT * FROM tbscores WHERE student_id = '".$r['student_id']."'");
$total = 0;
while($r2 = mysql_fetch_array($q2))
{
$total += $r2['scores'];
}
$rankingArray[$r['student_id']] = $total;
echo "<tr><td>$total</td><td>/* for rank*/</td></tr>";
}
asort($rankingArray);
$rankNumber = 1;
foreach ($rankingArray as $id => $rank) {
echo $rankNumber.' '.$id.' '.$rank.PHP_EOL;
$rankNumber++;
}
最好使用MySQL来处理这个并让PHP只显示结果。
答案 1 :(得分:0)
最好使用MySQL ORDER BY功能
$q = mysql_query("SELECT * FROM tbstudent tst LEFT JOIN tbscores tsc ON tst.id = tsc.student_id ORDER BY tsc.score DESC");
while($r = mysql_fetch_array($q))
{
$q2 = mysql_query("SELECT * FROM tbscores WHERE student_id = '".$r['student_id']."'");
$total = 0;
while($r2 = mysql_fetch_array($q2))
{
$total += $r2['scores'];
}
echo "<tr><td>$total</td><td>/* for rank*/</td></tr>";
}