mysql select 된값 업데이트 4

by 신제트 [SQL Query] [2022.04.01 09:39:51]


안녕하세요

                        중복 값들은 추출해서 그 중 idx가 작은값의 sort 를 +1 해주려고 합니다.
                       
                        idx  name  sort
                        1        a        1
                        2        b        2
                        3        c        3
                        4        d        2
                        5        e        5
                       
                        이렇게 db값이 들어가있다고 할때 sort 값이 중복 된 두 행 (즉 idx 2번과 4번 ) 을 불러 와서
                        그중 idx값이 더 작은 것을 (즉 idx 2번)의 sort 값을 +1 해주는 방법이 있을까요?
                       
                   
                        Q1. 그 중 idx 값이 더 작은 것의 sort 값을 +1 해주는 방법

                        Q2. 이 방법이 안된다면 순위를 바꾸려고 하는 값을 제외한 EX(4순위를 2순위로 기존의 2순위의 값도 있습니다.)

                               값들을 +1 해주는 방법도 있을까요? 기존의 2순위의 값이 중복값으로 같이 값이 변경이 안되거나 같이 +1이 되고있습니다.
                       
 

by 우주민 [2022.04.01 10:12:16]

 

 

위의 예시대로 된다면...

idx  name  sort
1        a        1
2        b        3
3        c        3
4        d        2
5        e        5

이런 데이터가 될텐데, 그렇다면 SORT 3번이 중복되겠는데요...?

혹시 중복된 SORT 숫자가 없을때 까지 순차적으로 저런 작업을 해줘야 한다는 것인가요..?


by 신제트 [2022.04.01 10:22:54]

먼저 put 값으로 $get_sort를 입력받아옵니다 그러면 4번째 에 있는 글을 2번째로 바꾸려고 2를 입력하면 db에는 정상적으로 2가 입력이되고 2보다 작은 1을 제외한 나머지값들이 +1 이 됩니다.

->   UPDATE table_name SET sort=sort+1 where sort>".$get_sort." 

그러면 sort값이 1 2 4 2 6 이 됩니다. 

그러나 기존의 2값이 업데이트가 되지 않아 2가 중복이 됩니다.

그래서 기존의 2의 값만 +1을 시켜주는 업데이트를 한번더하려고 하는데 방법이 있을까요?

 


by 우주민 [2022.04.01 10:35:49]

문법은 모르겠지만...

아마 이런식의 단계를 가져야 할듯 합니다.

 

UPDATE table_name SET sort=sort+1 where sort>= [$바꾸려는 sort 번호] and sort < [원래 sort 번호];

UPDATE table_name SET sort=[$바꾸려는 sort 번호] where idx = [바꾸려는 idx 번호];

 

음... 그런데 생각해보니 이런 구성은 sort 값이 큰 값에서 작은 값으로 변경할때만 가능할듯 한데...

고민을 좀 더 해봐야 겠는데요...?


by 신제트 [2022.04.01 11:00:17]

조인을 활용해서 해결하였습니다 도와주셔서 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입