php - 使用更新查询计算mysql中的排名

标签 php mysql

我们使用以下查询计算了排名。

set @rank = 0;
Update rank_table
     set position= (select @rank := @rank + 1)
     order by points DESC, points_new DESC, points_old DESC;

并依次计算排名。

例如。

enter image description here

我希望具有相同标准的 id 应该分配相同的排名。 所以可以说, 这里 id 1 和 2 具有相同的标准,然后应该有 position=1,然后 id 3 应该有 position=3。 不像电流。 当前 -> Id 1:position 1 , Id 2:position 2 , Id 3:position 3 但由于 Id 1 和 2 具有相同的数据,因此应该是..

Id 1:位置 1 , Id 2:位置 1 , Id 3:位置 3

感谢您的帮助。

最佳答案

从技术上讲,您想要的是 rank() 而不是 row_number()。这有点痛苦,但有可能:

set @rn := 0;
set @rank := 0;
set @p := -1;
Update rank_table
     set position = if(@rn := @rn + 1,
                       if(@p = points, @rank,
                          if(@p := points, @rank := @rn, @rank := @rn)
                         ),
                       NULL -- never should happen
                      )
     order by points DESC, points_new DESC, points_old DESC;

这很棘手,因为您需要同时计算排名和行号——排名保持不变,然后它必须“跳转”到行号。

关于php - 使用更新查询计算mysql中的排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33566478/

相关文章:

php - 多维索引数组到关联数组取决于列值

javascript - 我如何查看 AJAX 传递的数据

php - 可以将 PHP 集成到 Javascript 中吗?

mysql - 如何将映泰 V1.8 Suprema 连接到 MySQL?

php - cakephp中当值为null时如何保存记录?

php - 从图像或扫描文档中提取表格数据(非 pdf)

php - 如何在我的设置是 Windows 10 主机中的 Vagrant Ubuntu 16.06 的 Visual Studio Code 中配置 PHP 可执行文件

mysql - My SQL 和 Jasper 报表之间的集成

mysql - dbExpress 如何显示查询结果?

php - Jquery $.post 到 PHP 脚本时间滞后