반응형
SQL: 행 순서 위치를 변경하는 방법
예를 들어 다음과 같은 표가 있다고 합시다.
ID Name position
11 Kate 1
12 Frank 2
13 Anna 3
14 Peter 4
15 James 5
16 Michael 6
현재 아이디와 타겟 위치를 알려주면 효율적인 재주문 방법을 생각해내야 합니다.
SQL과 서버 측 언어를 조금 혼용하려고 했습니다. (Frank의 업그레이드):
if (newPosition > oldPosition) {
UPDATE people SET position = position - 1 WHERE listId = 1 AND position <= @newPosition AND Name != "Frank";
UPDATE people SET position = @newPos WHERE listId = 1 AND Name="Frank";
} else {
…
}
이 문제의 하나는 현재 위치가 0이면 음이 된다는 것입니다.
열을 다시 정렬하는 방법에 대한 아이디어 있나요?
편집: 예를 들어, Frank(위치 = 2)를 Peter(위치 = 4)와 James(위치 = 6) 사이로 이동한다고 가정해 보겠습니다. 따라서 이상적인 테이블은 다음과 같습니다.
ID Name position
11 Kate 1
13 Anna 2
14 Peter 3
12 Frank 4
15 James 5
16 Michael 6
저는 당신이 어떻게 재정렬 작업을 수행하고자 하는지 잘 모르겠습니다.이게 당신이 생각하고 있던 건가요?
update T
set position =
case
when newPosition > oldPosition then
case when position = least(oldPosition, newPosition)
then newPosition else position - 1 end
else /* newPosition < oldPosition */
case when position = greatest(oldPosition, newPosition)
then newPosition else position + 1 end
end
where position between
least(oldPosition, newPosition)
and greatest(oldPosition, newPosition)
and oldPosition <> newPosition
언급URL : https://stackoverflow.com/questions/40613896/sql-how-to-change-a-row-order-position
반응형
'programing' 카테고리의 다른 글
java: 지정된 초수 후에 함수를 실행합니다. (0) | 2022.10.02 |
---|---|
따옴표와 괄호가 있는 경우와 없는 경우의 set Timeout의 차이 (0) | 2022.10.02 |
utf8_bin과 latin1_general_cs의 차이점은 무엇입니까? (0) | 2022.10.02 |
line by line c - Linux ubuntu에서의 c++ 코드 디버깅 (0) | 2022.10.02 |
인덱스가 없는 느린 쿼리를 식별하려면 어떻게 해야 합니까? (0) | 2022.10.02 |