按字段值排序数据库,然后使用其订单号更新每一行

时间:2014-07-29 11:59:25

标签: mysql sql

无法想到最好的方法。

所以(例子):

我有一个包含10行的表格。在此表中有一个名为“点”的列。每行都有一个点表的值。到目前为止工作正常。

我现在想要一个名为'排名'的专栏。目的是通过点字段以某种方式对该表中的所有行进行排序,然后更新每一行'排名'通过按点值排序行来创建订单号/排名的字段。

因此,行按升序点排序,然后根据排名更新行数为1 - 10。

我该怎么做?

我已经使用Cron作业来更新点数字段,因此将其包括在内。

谢谢,克雷格。

我将如何排序行的示例:

SELECT * FROM blogs ORDER BY points ASC

Foreach row:

UDPATE blogs SET ranking  = ranking WHERE blogid = blogID

谢谢,P.S。这不是实际的查询,只是简单的英文解释如何想象这个工作。

2 个答案:

答案 0 :(得分:2)

也许这就是你想要的:

update blogs cross join
       (select @rn := 0) vars
    set ranking = (@rn := @rn + 1)
    order by points;

它使用变量和order byupdate内进行排序。

编辑:

您也可以在update之前设置变量:

set @rn := 0;

update blogs 
    set ranking = (@rn := @rn + 1)
    order by points;

答案 1 :(得分:0)

您是否考虑过sql中的排名?

http://msdn.microsoft.com/en-us/library/ms176102.aspx

我会想象类似的东西

SELECT name, points
,RANK() OVER 
(PARTITION BY point ORDER BY points) AS Rank
FROM table
ORDER BY points

您可以将其存储在临时表中,并根据等级数更新值。 但是,如果您不希望关系显示为相同的数字,则可能需要添加逻辑。