【发布时间】:2012-01-15 00:20:42
【问题描述】:
我有一张允许用户投票的项目表。在这个表中,有一个 votes 列,保存该项目累积的票数,还有一个 rank 列,这是根据他们拥有的票数对所有项目进行排名(即大多数票获得排名 1,第二多获得排名 2,依此类推)
目前,我在每次投票后重新计算每个项目的排名。也就是说,当用户投票时,我在该项目的 votes 列中添加一个,然后使用以下查询更新每个排名:
SET @rank = 0
UPDATE items SET rank = @rank := @rank + 1 ORDER BY votes DESC
这在大多数情况下都有效,但不考虑投票关系。如果我有投票 [10, 4, 3, 0],我希望排名 [1, 2, 3, 4]。但是,如果我有投票 [10, 10, 3, 0],我想要排名 [1, 1, 3, 4]。这不会发生;我仍然获得排名[1, 2, 3, 4]。
我怎样才能像上面描述的那样合并关系?
【问题讨论】: