2013-07-08 3 views
0

특정 스레드의 여러 게시물이 동일한 게시물 번호 (# 2)로 표시되는 것처럼 보이는 (포럼) 데이터베이스 수정 중입니다. 그들은 각각의 포럼 스레드 내에서 모두 "1"의 입장을 유지하고있는 것 같습니다.MySQL의 관련 열에 대한 증분 값 업데이트

나는 아래의 쿼리를 통해 적절한 수의 이러한 위치 값을 설정하는 쿼리를 찾기 위해 관리했습니다 : 불행하게도

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

를, 나는 단지 MySQL의 명령 줄을 통해이 업데이트 쿼리를 해왔습니다 여기서 나는 위쪽 화살표 키를 계속 선택하고 'thread_id'값을 1 씩 증가시키고 Return 키를 누릅니다. 루프 또는 커서를 통해이를 수행하는 더 빠른 방법이 있습니까? SQL 문법의 다른 부분에 익숙하지 않아 기본으로 만 얻을 수 있습니다.

답변

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 

당신은 올바른 값을 생성 있는지 확인하기 위해 테스트 할 수 있습니다. 다음은 join과 함께 update을 할 수 있습니다.

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;