无法想到最好的方法。
所以(例子):
我有一个包含10行的表格。在此表中有一个名为“点”的列。每行都有一个点表的值。到目前为止工作正常。
我现在想要一个名为'排名'的专栏。目的是通过点字段以某种方式对该表中的所有行进行排序,然后更新每一行'排名'通过按点值排序行来创建订单号/排名的字段。
因此,行按升序点排序,然后根据排名更新行数为1 - 10。
我该怎么做?
我已经使用Cron作业来更新点数字段,因此将其包括在内。
谢谢,克雷格。
我将如何排序行的示例:
SELECT * FROM blogs ORDER BY points ASC
Foreach row:
UDPATE blogs SET ranking = ranking WHERE blogid = blogID
谢谢,P.S。这不是实际的查询,只是简单的英文解释如何想象这个工作。
答案 0 :(得分:2)
也许这就是你想要的:
update blogs cross join
(select @rn := 0) vars
set ranking = (@rn := @rn + 1)
order by points;
它使用变量和order by
在update
内进行排序。
编辑:
您也可以在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
您可以将其存储在临时表中,并根据等级数更新值。 但是,如果您不希望关系显示为相同的数字,则可能需要添加逻辑。