加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP和排名中汇总行

发布时间:2020-12-13 17:06:08 所属栏目:PHP教程 来源:网络整理
导读:我在php中创建学生信息系统,数据库如下所示 **studentId** **Math** **English** **Science** **className**1 80 66 85 3p12 75 83 84 3p13 70 88 90 3p14 50 82 50 5p35 88 77 77 3p16 92 97 96 3p1 我想在使用php时只排名className 3P1的成员.当包含以下内
我在php中创建学生信息系统,数据库如下所示

**studentId** **Math** **English** **Science** **className**
1                 80        66         85       3p1
2                 75        83         84       3p1
3                 70        88         90       3p1
4                 50        82         50       5p3
5                 88        77         77       3p1
6                 92        97         96       3p1

我想在使用php时只排名className 3P1的成员.当包含以下内容时,下面的sql语句将在phpmyadmin中排名很好

SET @myclassName:=0;
SET @myRank:= 0;
SET @myNextRank:= 0;
SET @myTotals:= 0;

然而,当我将其转换为PHP并在php中使用它时,生成的等级是不一致的.每次我重新加载页面时,排名也会发生变化.我怎么包括

SET @myclassName:=0;
SET @myRank:= 0;
SET @myNextRank:= 0;
SET @myTotals:= 0;

在php的查询中.

<?php 

$StudentMarkz = "SELECT X.*,@myRank:=CASE WHEN @myclassName <> className
                                           THEN @myNextRank:=1
                                      WHEN @myTotals <> totals
                                           THEN @myRank:=@myNextRank
                                      ELSE @myRank
                                 END AS Rank,@myclassName:=className AS myclassName,@myTotals:=totals AS myTotals,@myNextRank:=@myNextRank+1 AS myNextRank
                   FROM ( SELECT studentmarkstable.studentId,surname,firstName,Math,English,Science,SocialStudies,studentmarkstable.className,Math + English + Science + SocialStudies AS totals
                            FROM studentmarkstable,student 
                           WHERE student.studentId=studentmarkstable.studentId 
                             AND studentmarkstable.className='3P1' 
                           ORDER BY className ASC,6 DESC
                        ) X";
$marksQuery = mysql_query($StudentMarkz) or die (mysql_error());

?>

如果我使用$marksQuery = mysqli_multi_query($StudentMarkz)或die(mysql_error());我收到一个错误.

先感谢您

解决方法

好.这是MySQL的解决方案,因为它可能是PHP脚本编写者中最常用的数据库:

SET @myClass:=0;
SET @myRank:= 0;
SET @myTotals:= 0;
SELECT X.*,@myRank:=CASE WHEN @myClass <> class 
                           THEN 1
                      WHEN @myTotals <> totals 
                           THEN @myRank+1
                      ELSE @myRank
                 END AS Rank,@myClass:=class AS myClass,@myTotals:=totals AS myTotals
  FROM ( SELECT studentId,Class,Math + English + Science AS totals
           FROM studentGrades
          ORDER BY 5 ASC,6 DESC
       ) X

得到:

studentId  Math  English  Science  Class  totals  Rank  myClass  myTotals
2          75    83       84       3p1    242     1     3p1      242
5          88    77       77       3p1    242     1     3p1      242
1          80    66       85       3p1    231     2     3p1      231
6          92    97       96       5p2    285     1     5p2      285
3          70    88       90       5p2    248     2     5p2      248
4          50    82       50       5p2    182     3     5p2      182

没有差距的队伍

编辑

如果您希望在几个具有相同等级的学生(例如1,2,4而不是1,3)之后维持后续的学生等级职位,请使用以下内容:

SET @myClass:=0;
SET @myRank:= 0;
SET @myNextRank:= 0;
SET @myTotals:= 0;
SELECT X.*,@myRank:=CASE WHEN @myClass <> class 
                           THEN @myNextRank:=1
                      WHEN @myTotals <> totals 
                           THEN @myRank:=@myNextRank
                      ELSE @myRank
                 END AS Rank,@myNextRank:=@myNextRank+1 AS myNextRank
  FROM ( SELECT studentId,6 DESC
       ) X

studentId  Math  English  Science  Class  totals  Rank  myClass  myTotals  myNextRank
2          75    83       84       3p1    242     1     3p1      242       2
5          88    77       77       3p1    242     1     3p1      242       3
1          80    66       85       3p1    231     3     3p1      231       4
6          92    97       96       5p2    285     1     5p2      285       2
3          70    88       90       5p2    248     2     5p2      248       3
4          50    82       50       5p2    182     3     5p2      182       4

在队伍中存在差距

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读