在我的表格中,在一小时内,每天有50名学生在某些考试中提交他们的分数。
以下是表格
ID StudID Marks Rank
1 101 56
2 102 23
3 103 84
4 104 96
5 105 44
我希望在插入所有这些记录后,排名应自动计算并针对每条记录进行搜索。 例如,Rank列将填充如下:
ID StudID Marks Rank
1 101 56 3
2 102 23 5
3 103 84 2
4 104 96 1
5 105 44 4
我想在mysql中为此创建一个查询。是在单个查询中完成还是需要任何功能或程序?我应该如何在mysql中为上述逻辑编写查询,函数或过程?
注意:我必须使用PHP实现上述逻辑。
答案 0 :(得分:1)
UPDATE TableName a
INNER JOIN
(
SELECT StudID, Marks,
(SELECT COUNT(DISTINCT b.Marks)
FROM tableName b
WHERE a.Marks <= b.Marks
) as rank
FROM tableName a
ORDER BY Marks DESC
) b ON a.StudID = b.StudID
SET a.Rank = b.rank
答案 1 :(得分:0)
我假设学生重新运行插入查询,所以当学生提交他们的标记时,他们运行查询插入... 试试这个:
INSERT INTO <thetable> (ID, StudID, Marks, Rank)
VALUES (<theid>, <thestudentid>, <themark>, NULL)
ON DUPLICATE KEY UPDATE Rank = (SELECT COUNT(*)+1
FROM <thetable>
WHERE Rank IS NOT NULL);
另一个假设:列“Rank”的初始值为NULL ,或者空字符串将条件Rank IS NOT NULL
更改为Rank = ''