본문 바로가기
Database/MySQL

[Mysql] SELECT 결과를 UPDATE문에 반영하기

by Devyne 2024. 3. 26.
반응형

가끔, 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를 마지막 순서로 설정할 수 있을 것이다.

반응형