【问题标题】:How can I get students position based on their total score如何根据学生的总分获得学生的位置
【发布时间】:2021-06-24 03:44:34
【问题描述】:

这段代码只是给我 1 作为我所有学生的位置。我希望学生根据他们的总数来确定他们的位置。如果他们总体上是平局,它也应该能够处理。任何帮助将不胜感激 下面是我的代码

$getStudPosition=mysqli_query($conn,"SELECT  sum(sr.total) AS gtot FROM  student_result sr WHERE   sr.studentId='$id' ORDER BY resId DESC");
        while ($r=mysqli_fetch_array($getStudPosition)) 
        {
            $students = array($gTotal=$r['gtot']);// convert to array
            $pos = $real_pos = 0;
            $prev_score = -1;
          foreach ($students as $exam_n => $score) 
            {
              $real_pos += 1;
              $pos = ($prev_score != $score) ? $real_pos: $pos;
              $prev_score = $score;
            }
            $average = $score/$totSubject; //getting students average
        }

我正在运行 10.4.18 版本的 MariaDB。

【问题讨论】:

  • 你从哪里得到学生姓名、总分、平均分和位置?此数据是否需要来自同一查询。请使用创建脚本和插入脚本的示例数据共享您的表结构。另外,请告诉我您使用的是哪个版本的 mysql。
  • some ideas 如果您有足够的 mysql-8.0 或 mariadb-10.2+ 版本,则显示窗口函数是一种简单的方法。
  • 学生姓名,总分是从数据库中获取的,平均是每个学生的总和/(总科目),也是从数据库中获取的。这个职位是我试图根据总计获得的。我正在运行 10.4.18 版本的 MariaDB
  • 您或许可以使用 ORDER BY。我不认为有一个函数可以做到这一点。
  • 你使用WHERE sr.studentId='$id' 选择一个学生——当然这个位置是1。

标签: php mysql ranking


【解决方案1】:

看起来您正试图在循环内一次为学生获取一个位置?一次为所有人获得职位将会更有效率。为此,您只需使用https://mariadb.com/kb/en/rank/。如果没有我们要求的信息,很难给出更详细的答案。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2017-11-24
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2016-08-04
    相关资源
    最近更新 更多