Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中,如何根据另一列自动更新表中的一列?_Php_Mysql_Sql - Fatal编程技术网

Php 在MySQL中,如何根据另一列自动更新表中的一列?

Php 在MySQL中,如何根据另一列自动更新表中的一列?,php,mysql,sql,Php,Mysql,Sql,在我的表格中,在一个小时内,50名学生将在每天的一些考试中提交他们的分数 下表 ID StudID Marks Rank 1 101 56 2 102 23 3 103 84 4 104 96 5 105 44 我想当所有这些记录都被插入时,排名应该自动计算并针对每个记录进行插入。 例如,“排名”列将按如下方式填充: ID StudID Marks Rank 1 101 56

在我的表格中,在一个小时内,50名学生将在每天的一些考试中提交他们的分数

下表

ID    StudID  Marks  Rank
1     101     56 
2     102     23
3     103     84
4     104     96
5     105     44
我想当所有这些记录都被插入时,排名应该自动计算并针对每个记录进行插入。 例如,“排名”列将按如下方式填充:

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实现上述逻辑

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

我假设学生重新运行insert查询,所以当学生提交他们的分数时,他们会运行查询insert到。。。 试试这个:

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 NOT NULL更改为Rank=

您希望在查询结果时将该列作为表中的一列还是作为派生值?@AgRizzo-我希望列作为列,因为每个学生在我的站点中都有一个配置文件。我给他们的功能,他们可以看到他们的排名,任何一天,当他们去他们的个人资料和选择日期。谢谢你的帮助。只有一个问题…此解决方案是否针对5000条记录进行了优化?5k记录并不太多。您在表上设置了索引吗?请尝试添加一个,更改表TableName添加INDEXMarks、StudID并执行update语句。