2012-11-20 4 views
1

하자 내 UI 사용자가 드래그 앤 드롭하여 순서를 변경할 수 있습니다에서, 지금, 나는이 테이블이항목 순서 변경을위한 업데이트 SQL 생성?

ID   Name  Order 
======== ======== ========= 
1   d   1 
2   g   2 
3   b   3 
4   f   4 
5   a   5 

을 말한다. 예를 들어, 항목 d를 항목으로 이동시킬 수 있습니다.

ID   Name  Order 
======== ======== ========= 
2   g   1 
3   b   2 
4   f   3 
1   d   4 
5   a   5 

어느 한 날은 SQL 말할 수처럼 그리고 내 테이블 보입니까? ID, OldOrder 및 NewOrder를 입력했습니다.

+0

ID는 고유 식별자라고 가정합니다. (OldOrder를 사용하여) 주문 내역을 추적하거나 사용자가 'to'로 업데이트하려는 현재 주문에만 관심이 있습니까? –

+0

@RayK, 하나의 업데이트가 여러 행에 영향을줍니다. – user960567

답변

6

ID 매개 변수가 필요하지 않습니다. 위 또는 원래 새로운 위치 아래

UPDATE 
    yourTable 
SET 
    Order = (CASE WHEN  Order = @oldOrder THEN @newOrder 
       WHEN @newOrder > @oldOrder THEN Order - 1 
              ELSE Order + 1 END) 
WHERE 
    Order BETWEEN @oldOrder AND @newOrder 
    OR Order BETWEEN @newOrder AND @oldOrder 
  • 아무것도 변경할 필요가 없습니다.
  • 다른 모든 것은 위나 아래로 움직입니다.
  • 원래 항목을 제외하고 새 항목으로 이동합니다.
+1

나는 당신의 대답이 내 (그 동안) 삭제 된 대답보다 훨씬 낫다는 것을 인정해야한다.이 좋은 해결책을 가르쳐 준 +1. – Luke94

+0

아주 좋아 보이지만 조금 크다고 생각한다. 감사합니다. – user960567

+1

@ user960567 - 모든 필요한 레코드를 업데이트하고, 위쪽으로 이동하고 아래쪽으로 이동하는 작업을 고려하고, 모든 것을 단일 성명으로 수행한다는 점을 감안할 때,이 모든 것이 중요하다고 생각하지 않습니다. 당신이 원하는 모든 것을 생각해보십시오. 얼마나 짧습니까? * (적어도 20 + 라인에 도달 할 때까지는 ** 큰 ** 쿼리를 고려하지 않을 것입니다.) * – MatBailie