반응형
가끔, select 결과인 값을 바로 set update 할 때가 있다.
현재 카테고리 사이드바를 db화 하여 보다 유동적인 세팅이 가능하도록 설계 중이다.
여기에 카테고리마다의 순서 또한 db column으로 세팅하여 order by를 통해 순서 또한 설정할 수 있도록 설계 중이다.
여기서 카테고리를 새로 등록을 할 때, 배치 순서(listOrder) 어떻게 insert 해야 할까 고민하고 있었다.
내 생각으론 처음 등록 시엔 마지막 순서로 설정하고, 순서 수정 시에 그때 update 하는 걸로 생각했다.
그러면 처음 등록을 할 때 listOrder를 마지막 순서의 값으로 어떻게 설정할 수 있을까.
현재 category table의 column은 idx, name, pid, listOrder, icon 이렇게 구성되어 있다.
처음 카테고리를 등록할 때, 사용자로 하여금 name과 pid를 입력받는다.
최상위 카테고리인 경우 pid값이 0으로 받는다.
💡여기서 pid는 상위 카테고리의 idx 값이다. (parrent_id)
INSERT INTO category(name, pid, icon) VALUES ("first", 0, "메뉴 옆 아이콘의 class")
등록 후 조회를 해보면 다음과 같을 것이다.
idx | name | pid | icon | listOrder |
---|---|---|---|---|
1 | first | 0 | c-main(예시) | null |
이 listOrder 값을 마지막 순서로 업데이트하기 위해선,
같은 pid 값을 가진 것들 중 listOrder의 최댓값에서 +1 한 값으로 update 하면 된다.
update 쿼리는 다음과 같을 것이다.
UPDATE category c, (SELECT IFNULL(MAX(listOrder), 0) + 1 AS listOrder FROM category WHERE pid = #{pid}) cc
SET
c.listOrder = cc.listOrder
WHERE idx = #{idx}
💡 idx 값은 pk로 auto increment로 설정되어 있다. 처음 insert query 이후 selectkey를 통해 추가된 행의 idx값을 가지고 update 쿼리 진행.
다음과 같이 조회하고자 한 테이블을 연다라 작성하면, 조회된 값으로 update를 진행할 수 있다.
이렇게 하면 insert 이후 update 진행하여 listOrder를 마지막 순서로 설정할 수 있을 것이다.
반응형
'Database > MySQL' 카테고리의 다른 글
[MySQL] UPDATE 문에서 다른 테이블의 값을 활용하는 방법 (0) | 2025.03.31 |
---|