在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 在队伍中存在差距 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |