์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ํน์ ํ์ฌ์ ์ฌ์ฉ์ ๋ชฉ๋ก์ ์กฐ์ง๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ ฌํด์ผ ํ์ง๋ง, ๊ธฐ์กด ์ฟผ๋ฆฌ์์ ์ผ๋ถ ์ฌ์ฉ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ ฌ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ์กฐ์ง ์ฝ๋์ ์ ๋ ฌ ์์(sort_order
)๋ฅผ ํ์ฉํ์ฌ ์ ๋ ฌ ๊ธฐ์ค์ ๋ช
ํํ ์ง์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ค.
โ ์กฐ์ง๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ๋ชฉ๋ก์ ์กฐํํ ๋, ์ ํํ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ง์ง ์์
โ
์ผ๋ถ ์ฌ์ฉ์๋ค์ sort_order
๊ฐ์ด ์๊ฑฐ๋ 0
์ผ๋ก ์ค์ ๋์ด ์์ด, ์ ๋ ฌ ์ฐ์ ์์๊ฐ ์ ์ฉ๋์ง ์์
โ ์์ ๋ถ์์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ ์ ๋ ฌ์ด ํ์
โ
์กฐ์ง ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด WITH RECURSIVE
๋ฅผ ํ์ฉํ์ฌ ์กฐ์ง๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์กฐํ
โ
์ฌ์ฉ์์ ๋ถ์ ์ ๋ ฌ ์์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด dept_sort_order
๊ฐ์ ์ถ๊ฐํ์ฌ ์กฐ์ง๋ ๊ธฐ๋ฐ ์ ๋ ฌ์ ๋ณด์ฅ
โ ์ ๋ ฌ ๊ธฐ์ค์ ๋ช ํํ ์ค์ ํ์ฌ ๋ฐ์ดํฐ ์กฐํ ์ ์ผ๊ด๋ ์์๋ฅผ ์ ์ง
๐ ์์ ํ MyBatis ์ฟผ๋ฆฌ
WITH RECURSIVE CTE AS (
SELECT code, parent_code
FROM company_structure
WHERE code = #{company_code} AND enabled = true
UNION ALL
SELECT c.code, c.parent_code
FROM company_structure c
INNER JOIN CTE ON c.parent_code = CTE.code AND c.enabled = true
)
SELECT
u.*,
d.name AS department_name,
d.full_hierarchy AS department_hierarchy,
(SELECT sort_order
FROM department_structure
WHERE code = u.department_code AND company_code = u.company_code) AS department_sort_order
FROM users u
JOIN department_structure d
ON u.company_code = d.company_code
AND u.department_code = d.code
JOIN (
SELECT * FROM CTE
) c ON c.code = u.company_code
WHERE u.sort_order IS NOT NULL AND u.sort_order > 0 -- ์ ๋ ฌ ์ฐ์ ์์๊ฐ ์๋ ์ฌ์ฉ์ ์ ์ธ
ORDER BY
u.company_code,
department_sort_order,
u.sort_order;
โ ์กฐ์ง๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐ์ดํฐ ์กฐํ ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ๋ ๊ฒ์ด ์ค์ํ๋ค.