2012-04-11 3 views
1

사용자 정의 표시 순서 레코드를 제어하는 ​​데 사용되는 정수 필드가있는 테이블이 있습니다.행 번호를 기반으로 테이블 업데이트

예 :

SET @rownumber = 0; 

SELECT 
@rownumber:[email protected]+1 AS rownumber, 
slides.displayorder 
WHERE 
active = 1 
ORDER BY displayorder ASC 

이 쿼리 나에게 조금이 같은 결과를 제공합니다

rownumber | displayorder 
-----------+------------- 
    1   2 
    2   7 
    3   15 
    4   50 
    5   80 

레코드가/승인되지 않은 (표시 순서에 따라서 격차를) 삭제됩니다 때까지 확인을 작동합니다.

레코드를 제거한 후 displayorder 열을 rownumber 변수의 값으로 설정하는 업데이트 쿼리를 실행하고 싶습니다.

rownumber | displayorder 
-----------+------------- 
    1   1 
    2   2 
    3   3 
    4   4 
    5   5 

이 작업을 수행 할 수있는 간단한 방법이 있을까요 :이 같은 결과를주는

?

+0

갭이 중요한 이유는 무엇입니까? 삭제시 주문이 보존됩니다. 확실하게 삽입/업데이트시 '영리한'작업 만 수행하면됩니다. – briantyler

+0

트리거 사용에 익숙합니까? 삭제에 의해 트리거되는 업데이트는 사용자가 원하는 것을 수행합니다. 즉, 항목을 재정렬하는 전략에 대해 궁금합니다. # 5 행이 # 2와 # 3 사이에 표시되도록 사용자가 지정할 수 있습니까? –

+0

트릭 (SELECT @var : = @ var + 1 ..)이 MySql에서 작동합니까? – RBarryYoung

답변

1

이 작업을 수행하는 것으로 보입니다.

SET @rownumber = 0; 
INSERT INTO slides (id, displayorder) 
SELECT a.id, a.rownumber 
FROM (SELECT id, (@rownumber:[email protected]+1) AS rownumber FROM slides WHERE active = 1 ORDER BY displayorder ASC) AS a ON DUPLICATE KEY UPDATE displayorder = a.rownumber 
관련 문제