CREATE DEFINER=`root`@`%` PROCEDURE `sp_upd_category_order`(
IN i_id varchar(20)
, IN i_group_code int
, IN i_to_position int
, IN i_from_position int
, OUT o_result int
)
DETERMINISTIC
BEGIN
/*
카테고리 정렬 순서 변경
*/
set o_result = -1;
-- 지정 카테고리의 순번을 i_to_position 로 설정
update tbl_group_info set ordinal_position = i_to_position
where id=i_id and group_code = i_group_code ;
-- 기준 순서 위쪽 정렬
update tbl_group_info ta inner join
(
select id, group_code, (@rownum := @rownum +1) num
from tbl_group_info, (select @rownum := 0) ta
where id=i_id and group_code!=i_group_code and ordinal_position < i_to_position+i_from_position
order by ordinal_position asc
) tb
on ta.id = tb.id and ta.group_code=tb.group_code
set ta.ordinal_position = tb.num;
-- 기준 순서 아래쪽 정렬
update tbl_group_info ta inner join
(
select id, group_code, (@rownum := @rownum +1) num
from tbl_group_info, (select @rownum := 0) ta
where id=i_id and group_code!=i_group_code and ordinal_position >= i_to_position
order by ordinal_position asc
) tb
on ta.id = tb.id and ta.group_code=tb.group_code
set ta.ordinal_position = tb.num + i_to_position;
set o_result = 1;
END