php – 将等级列表存储在mysql表中
发布时间:2020-12-13 16:20:57 所属栏目:PHP教程 来源:网络整理
导读:让这个表(rank_list). +--------+--------+--------+--------+| Sub | Name | Rank | Marks |+--------+--------+--------+--------+|Math2 |Smith | 1| 85||Math1 |John | 1| 92||Math1 |Susan | 2| 91||Math1 |Abc | 3| 90.5|+--------+--------+--------+
让这个表(rank_list).
+--------+--------+--------+--------+ | Sub | Name | Rank | Marks | +--------+--------+--------+--------+ |Math2 |Smith | 1| 85| |Math1 |John | 1| 92| |Math1 |Susan | 2| 91| |Math1 |Abc | 3| 90.5| +--------+--------+--------+--------+ 现在我还有四个结果.我必须插入这些给他们正确的排名.我也不接受排名超过3的结果. Sub = Math2,Name = Mile,Marks = 86 Sub = Math1,Name = Luna,Marks = 92.5 Sub = Physics1,Name = Sakib,Marks = 88.75 Sub = Math1,Name = Coolb,Marks = 65 由于Mile有一个排名为2的标记,他将被插入Rank 2. Luna有最高分,她将获得等级1,Abc将被删除(是的,删除). Sakib来自Physics1,因此他将直接插入,因为他目前在物理学中排名第一. 不会插入Coolb,因为他不在前3名. 我想要MySQL查询来做到这一点. 我可以使用PHP来做到这一点,但这需要很长时间.所以,我想使用SQL(更快的插入和删除)来做到这一点.我需要你的帮助.提前致谢. 解决方法
这是
How to perform grouped ranking in MySQL的一个无耻偷窃的例子
你的数据库设计并不适合它,但它确实有效,在你达到很多行之前它不会变慢,如果你觉得它太慢了,你总是可以使用一个触发器并创建一种“物化观点“与目前的排名. 小提琴测试:http://sqlfiddle.com/#!2/b2cd8/15 基于您的表的SQL: SELECT Name,Sub,Marks,Rank FROM (SELECT Name,@student:=CASE WHEN @last_sub <> Sub THEN 1 ELSE @student+1 END AS Rank,@last_sub:=Sub FROM (SELECT @student:= 0) AS s,(SELECT @class:= 0) AS c,(SELECT * FROM rank_list ORDER BY Sub,Marks DESC ) AS temp ) AS temp2 WHERE Rank <= 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |