使用PHP从数据库创建排名

时间:2015-11-30 00:14:03

标签: php mysql

我想问一下,如何从数据库中的分数表创建排名?例如,数据库表有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创建它?

2 个答案:

答案 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>";
}