在MySQL中更新相关列的列中的增量值

时间:2013-07-08 10:39:38

标签: mysql forum

我正在努力修复我们的(论坛)数据库,因为似乎某些帖子中的几个帖子都显示了相同的帖子号码(#2)。看起来他们都在每个论坛帖子中都占有“1”的位置。

我设法找到一个查询,通过以下查询将这些位置值设置为正确的数字:

select @i := -1; update `xf_post` set position = (select @i := @i + 1) where thread_id=1; 

不幸的是,我只是通过MySQL命令行进行此更新查询,我不断选择向上箭头键,将'thread_id'值递增1,然后点击Return键。有没有更快的方法通过循环或游标执行此操作?我对SQL语法的其他部分不是很熟悉,而且我只熟悉基础知识。

1 个答案:

答案 0 :(得分:0)

您可以使用以下查询来获取每个线程所需的数字:

select thread_id,
       (case when @prev = thread_id then @rn := 1 else @rn := @rn + 1 end) as rn,
       @prev = @threadid
from xf_post p cross join
     (select @rn := 0, @thread_id = -1) const
order by thread_id, position

您可以测试它以确保它产生正确的值。接下来,您可以使用update

执行join
update xf_post join
       (select thread_id, post_id,
               (case when @prev = thread_id then @rn := 1 else @rn := @rn + 1 end) as rn,
               @prev = @threadid
        from xf_post p cross join
             (select @rn := 0, @thread_id = -1) const
        order by thread_id, post_id
       ) toupdate
       on xf_post.post_id = toupdate.post_id
    set xf_post.position = toupdate.rn;