php - 从选择结果更新行

标签 php mysql sql

我正在进行一个项目,需要排名并向用户输出总分。

我有一个名为 userdata 的表像这样

    id  matricno    mtstotal    engtotal    grandtotal  Rank

    1   MXX001      6           4           
    2   MXX002      9           8           
    3   MXX003      5           3           
    4   MXX004      4           7           
    5   MXX005      7           2           


    SELECT * FROM (
      SELECT s.*, @rank := @rank + 1 rank FROM (
        SELECT matricno, sum(mtstotal + engtotal) TotalPoints FROM userdata
        WHERE class='1' AND subclass='A'
        GROUP BY matricno
      ) s, (SELECT @rank := 0) init
      ORDER BY TotalPoints DESC
    ) r

这个 SQL 创建一些临时的东西

    matricno    TotalPoints rank

    MXX002      17          1           
    MXX004      11          2           
    MXX001      10          3           
    MXX005      9           4           
    MXX003      8           5

我想要的是在上面的语句中添加一条语句,该语句将复制 TotalPoints 和排名值,并分别更新总计和排名列。 即使它正在格式化另一个代码,但它应该能够在一个编码中求和、排名和更新

最佳答案

更新userdata时,将其作为子选择与您的查询结合起来并使用其中的值

UPDATE userdata ud
JOIN(
  SELECT s.*, @rank := @rank + 1 rank FROM (
    SELECT matricno, sum(mtstotal + engtotal) TotalPoints FROM userdata
    WHERE class='1' AND subclass='A'
    GROUP BY matricno
  ) s, (SELECT @rank := 0) init
  ORDER BY TotalPoints DESC
) r ON r.matricno = ud.matricno
SET ud.grandtotal = r.TotalPoints,
    ud.Rank       = r.rank

关于php - 从选择结果更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34457681/

相关文章:

php - 如何在mysql中添加所有列的数据

php - Yii UrlManager 和多个 Get 参数

mysql - 这应该是 INNER JOIN 还是 LEFT Join?

MySQL 将行转为动态数量的列

php - hasAndBelongsToMany 不提取关联外键的数据

php - PDO(PHP 数据对象)的缺点

c# - 尝试保存到数据库时,列数与第 1 行的值数不匹配

php - 无法在 CakePHP 的内部连接中获取第二个表值

php - 当日期和时间位于不同字段时,MySQL 查询选择一些行

sql - 将函数编辑为 0xdbe