对总数未存储在数据库中的值的总和进行排名

时间:2014-08-12 15:50:07

标签: php mysql pdo ranking

我有一张表,其中有四名学生的不同考试记录都在同一个班级。这个标记还没有在数据库中总结出来。我的问题是,是否可以在前端对各个学生的分数求和,然后对它们进行排名?我已经成功地在前端总结了标记但我的排名代码不起作用。第一个表显示数据库记录,而第二个表显示结果虽然排名为空:(

preview

result preview

这是我尝试的排名代码

    <?php

    $getrnk=$db->query("SELECT SUM(marks)FIND_IN_SET( marks, (    
    SELECT GROUP_CONCAT( marks
    ORDER BY marks DESC ) 
    FROM examresults )
      ) AS rank
    FROM examresults
    WHERE adm_no ='$reg'");

    $getrnk->execute();

    $rnk=$getrnk->fetch(PDO::FETCH_ASSOC);

    $strank=$rnk['rank'];
    echo $strank;

     ?>

1 个答案:

答案 0 :(得分:3)

您的代码非常聪明,所以让我们努力使其成功:

SELECT SUM(marks),
       FIND_IN_SET(SUM(marks),
                   (SELECT GROUP_CONCAT(summarks ORDER BY summarks DESC ) 
                    FROM (SELECT SUM(marks) as summarks
                          FROM examresults
                          GROUP BY adm_no
                         ) sm
                   )
                  ) AS rank
FROM examresults
WHERE adm_no = '$reg';

我印象深刻,因为我永远不会想到使用find_in_set()以这种方式获得排名。通常在MySQL中,人们会使用变量进行排名。