Backend Ddevelopment
βπ[Backend Development] 무ν depth λκΈ μ λ ¬ ꡬ쑰λ 무μμΌκΉμ?β
β
무ν Depth λκΈ μ λ ¬ ꡬ쑰
- 무ν depth λκΈμ νμ΄μ§ μ²λ¦¬νκΈ° μν΄μλ νΈλ¦¬ ꡬ쑰λ₯Ό μ μ§νλ©΄μ μ λ ¬νλ μ λ΅μ΄ νμν©λλ€.
- λ³΄ν΅ parent_comment_id + comment_id μ λ ¬ λ°©μμ μ¬μ©νλ 2-depth λκΈκ³Όλ λ¬λ¦¬, 무ν depthμ κ²½μ° λκΈμ κ³μΈ΅ ꡬ쑰λ₯Ό μ μ§ν μ μλλ‘ μ λ ¬ λ°©μμ΄ κ°μ λμ΄μΌ ν©λλ€.
π1οΈβ£ νΈλ¦¬ ꡬ쑰 κΈ°λ° μ λ ¬ λ°©λ²
- 무ν depthμ λκΈμ μ λ ¬νλ €λ©΄ λ€μκ³Ό κ°μ λ°©μμ΄ κ°λ₯ν©λλ€.
1οΈβ£ μ λ ¬ λ°©μ
- root_comment_id (μ΅μμ λΆλͺ¨ ID) μ€λ¦μ°¨μ
- path (νΈλ¦¬ μμ) μ€λ¦μ°¨μ
-
comment_id (μμ± μμ) μ€λ¦μ°¨μ
- μ΄λ κ² μ λ ¬νλ©΄ νΈλ¦¬ ꡬ쑰λ₯Ό μ μ§νλ©΄μ λκΈμ μκ°μμΌλ‘ μ λ ¬ν μ μμ΅λλ€.
π2οΈβ£ νΈλ¦¬ ꡬ쑰λ₯Ό μ μ§νλ μ λ ¬ νλ
νλλͺ
|
μ€λͺ
|
comment_id |
λκΈμ κ³ μ ID (κΈ°λ³Έ ν€) |
parent_comment_id |
λΆλͺ¨ λκΈμ ID (μ΅μμ λκΈμ΄λ©΄ NULL) |
root_comment_id |
μ΅μμ λΆλͺ¨ λκΈμ ID (μ΅μμ λκΈμ΄λ©΄ μκΈ° μμ comment_id) |
depth |
λκΈμ κΉμ΄ (0λΆν° μμ) |
path |
νΈλ¦¬ ꡬ쑰λ₯Ό λνλ΄λ μ λ ¬μ© λ¬Έμμ΄ |
π3οΈβ£ μ λ ¬ μμ SQL μμ
π 무ν Depth μ λ ¬μ μν ORDER BY
SELECT * FROM comment
WHERE article_id = ?
ORDER BY root_comment_id ASC, path ASC, comment_id ASC
LIMIT ?, ?;
π μ λ ¬ κΈ°μ€.
-
1. root_comment_id ASC β μ΅μμ λΆλͺ¨ λκΈ κΈ°μ€μΌλ‘ μ λ ¬
-
2. path ASC β νΈλ¦¬ ꡬ쑰λ₯Ό μ μ§νλ©΄μ μ λ ¬
-
3. comment_id ASC β κ°μ depth λ΄μμ μμ± μμλλ‘ μ λ ¬
π4οΈβ£ path νλλ?
-
νΈλ¦¬ ꡬ쑰λ₯Ό νννκΈ° μν΄ path νλλ₯Ό νμ©ν μ μμ΅λλ€.
- pathλ λΆλͺ¨-μμ κ΄κ³λ₯Ό λͺ
ννκ² νμ¬ μ λ ¬μ μ©μ΄νκ² ν©λλ€.
- μλ₯Ό λ€μ΄, pathλ λ€μκ³Ό κ°μ λ°©μμΌλ‘ μ μ₯λ μ μμ΅λλ€.
comment_id |
parent_comment_id |
root_comment_id |
depth |
path |
1 |
NULL |
1 |
0 |
00001 |
2 |
1 |
1 |
1 |
00001.00002 |
3 |
1 |
1 |
1 |
00001.00003 |
4 |
2 |
1 |
2 |
00001.00002.00004 |
5 |
4 |
1 |
3 |
00001.00002.00004.00005 |
- π μ λ ¬ μ ORDER BY path ASCλ₯Ό μ¬μ©νλ©΄ κ³μΈ΅ ꡬ쑰λ₯Ό μ μ§νλ©΄μ μ λ ¬ κ°λ₯!
π5οΈβ£ μ 리
- β
무ν depth λκΈ μ λ ¬μ μν€ path λλ lft/rgt λ°©μμ΄ νμ
- β
μ λ ¬ μμλ root_comment_id ASC, path ASC, comment_id ASC λ°©μ μ¬μ©
- β
νμ΄μ§ μ²λ¦¬ μ LIMIT ?,? μ μ© κ°λ₯
- π κΈ°μ‘΄ 2-depth λ°©μμ²λΌ parent_comment_id μ λ ¬λ§μΌλ‘λ 무ν depth μ λ ¬μ΄ μ΄λ €μ°λ―λ‘ pathλ₯Ό νμ©νλ κ²μ΄ κ°μ₯ μ μ ν©λλ€.