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

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

(编辑:李大同)

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

    推荐文章
      热点阅读