如何在MySQL中自动根据其他列更新表的列?

时间:2013-11-02 13:19:24

标签: php mysql sql

在我的表格中,在一小时内,每天有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实现上述逻辑。

2 个答案:

答案 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 = ''