gpt4 book ai didi

php - 将排名表存储在 mysql 表中

转载 作者:可可西里 更新时间:2023-11-01 07:37:31 25 4
gpt4 key购买 nike

让这个表(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 的分数最高,她将获得 Rank 1 并且 Abc 将被删除(是的,已删除)。

Sakib来自Physics1,因此他将直接插入,因为他目前在物理上排名第一。

Coolb 不会被插入,因为他不在前 3 名中。

我希望 MySQL 查询来执行此操作。

我可以使用 PHP 来完成此操作,但这会花费很多时间。所以,我想使用 SQL 来执行此操作(以便更快地插入和删除)。我需要你的帮助。提前致谢。

最佳答案

这是来自 How to perform grouped ranking in MySQL 的无耻盗用示例

您的数据库设计不太适合它,但它确实可以工作,并且在您达到非常高的行数之前它不会变慢,如果您觉得它太慢,您总是可以使用触发器并创建一个一种具有当前排名的“物化 View ”。

测试 fiddle :http://sqlfiddle.com/#!2/b2cd8/15

基于您的表的 SQL:

SELECT Name, Sub, Marks, Rank
FROM
(SELECT Name, Sub, Marks,
@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

关于php - 将排名表存储在 mysql 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15050731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com