Home > Backend Development > πŸ“š[Backend Development] μ΅œλŒ€ 2depth λŒ“κΈ€ μ •λ ¬ κ΅¬μ‘°λž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸ“š[Backend Development] μ΅œλŒ€ 2depth λŒ“κΈ€ μ •λ ¬ κ΅¬μ‘°λž€ λ¬΄μ—‡μΌκΉŒμš”?
Backend Ddevelopment

β€œπŸ“š[Backend Development] μ΅œλŒ€ 2depth λŒ“κΈ€ μ •λ ¬ κ΅¬μ‘°λž€ λ¬΄μ—‡μΌκΉŒμš”?”

βœ… μ΅œλŒ€ 2 Depth λŒ“κΈ€ μ •λ ¬ ꡬ쑰 μ„€λͺ….

  • μ΅œλŒ€ 2 Depth(계측이 μ΅œλŒ€ 2단계)κΉŒμ§€λ§Œ ν—ˆμš©ν•˜λŠ” λŒ“κΈ€ μ‹œμŠ€ν…œμ˜ μ •λ ¬ κ΅¬μ‘°λŠ” 비ꡐ적 λ‹¨μˆœν•˜λ©΄μ„œλ„ νš¨μœ¨μ μž…λ‹ˆλ‹€.

πŸ—οΈ1️⃣ λŒ“κΈ€ ν…Œμ΄λΈ” ꡬ쑰.

  • μ΅œλŒ€ 2 Depth λŒ“κΈ€μ„ μ €μž₯ν•˜λŠ” ν…Œμ΄λΈ” κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
ν•„λ“œλͺ… μ„€λͺ…
comment_id λŒ“κΈ€μ˜ 고유 ID (PK)
parent_comment_id λΆ€λͺ¨ λŒ“κΈ€ ID (μ΅œμƒμœ„ λŒ“κΈ€μ΄λ©΄ NULL)
article_id ν•΄λ‹Ή λŒ“κΈ€μ΄ μ†ν•œ κ²Œμ‹œκΈ€ ID
content λŒ“κΈ€ λ‚΄μš©
created_at λŒ“κΈ€ μž‘μ„± μ‹œκ°„

πŸ“Œ νŠΉμ§•.

  • μ΅œμƒμœ„ λŒ“κΈ€μ€ parent_comment_id = NULL (예: λŒ“κΈ€ 1, λŒ“κΈ€ 3)
  • μžμ‹ λŒ“κΈ€μ€ parent_comment_id = λΆ€λͺ¨μ˜ comment_id (예: λŒ“κΈ€2, λŒ“κΈ€ 4, λŒ“κΈ€ 5)
  • 2 DepthκΉŒμ§€λ§Œ ν—ˆμš© (λŒ“κΈ€μ˜ λŒ“κΈ€κΉŒμ§€λ§Œ κ°€λŠ₯, λŒ€λŒ“κΈ€μ˜ λŒ€λŒ“κΈ€μ€ λΆˆκ°€λŠ₯)

πŸ—οΈ2️⃣ μ •λ ¬ 방식

  • μ΅œλŒ€ 2 Depth λŒ“κΈ€ 정렬은 λ‹€μŒκ³Ό 같은 μˆœμ„œλ‘œ μ§„ν–‰λ©λ‹ˆλ‹€.
ORDER BY parent_comment_id ASC, comment_id ASC

πŸ“Œ μ •λ ¬ κΈ°μ€€.

    1. parent_comment_id ASC ➞ 같은 λΆ€λͺ¨ λŒ“κΈ€μ„ κΈ°μ€€μœΌλ‘œ κ·Έλ£Ήν™”.
    1. comment_id ASC ➞ μž‘μ„±λœ μˆœμ„œλŒ€λ‘œ μ •λ ¬ (였래된 λŒ“κΈ€μ΄ λ¨Όμ € 좜λ ₯됨).

πŸ—οΈ3️⃣ μ •λ ¬ 데이터 μ˜ˆμ‹œ.

  • μœ„ μ •λ ¬ 방식에 따라 λŒ“κΈ€ 데이터λ₯Ό μ‘°νšŒν•˜λ©΄ λ‹€μŒκ³Ό 같은 ν˜•νƒœκ°€ λ©λ‹ˆλ‹€.
parent_comment_id comment_id λ‚΄μš©
NULL 1 λŒ“κΈ€1 (μ΅œμƒμœ„ λŒ“κΈ€)
1 2 λŒ“κΈ€2 (λŒ“κΈ€1의 λŒ€λŒ“κΈ€)
1 4 λŒ“κΈ€4 (λŒ“κΈ€ 1의 λŒ€λŒ“κΈ€)
NULL 3 λŒ“κΈ€3 (μ΅œμƒμœ„ λŒ“κΈ€)
3 5 λŒ“κΈ€5 (λŒ“κΈ€ 3의 λŒ€λŒ“κΈ€)

πŸ“Œ 이 μ •λ ¬ λ°©μ‹μ˜ μž₯점.

  • parent_comment_idλ₯Ό κΈ°μ€€μœΌλ‘œ λ¨Όμ € μ •λ ¬ν•˜μ—¬ μ΅œμƒμœ„ λŒ“κΈ€μ΄ λ¨Όμ € 좜λ ₯됨
  • 같은 parent_comment_idλ₯Ό 가진 λŒ“κΈ€(λŒ€λŒ“κΈ€)은 μž‘μ„± μˆœμ„œλŒ€λ‘œ 정렬됨
  • LIMIT ?, ?을 ν™œμš©ν•˜μ—¬ νŽ˜μ΄μ§• 처리 κ°€λŠ₯

πŸ—οΈ4️⃣ SQL μ •λ ¬ 예제

SELECT * FROM comment
WHERE article_id = ?
ORDER BY parent_comment_id ASC, comment_id ASC
LIMIT ?, ?;

πŸ—οΈ5️⃣ νŽ˜μ΄μ§• 처리.

  • 각 νŽ˜μ΄μ§€μ—μ„œ N개 λŒ“κΈ€μ„ 뢈러올 수 μžˆλ„λ‘ LIMIT ?,? μ‚¬μš©
  • μ΅œμƒμœ„ λŒ“κΈ€κ³Ό λŒ€λŒ“κΈ€μ„ ν•¨κ»˜ 뢈러였기 μœ„ν•΄ parent_comment_id κΈ°μ€€ μ •λ ¬ μœ μ§€
  • μ΅œλŒ€ depthκ°€ 2μ΄λ―€λ‘œ μ„±λŠ₯ μ΅œμ ν™”μ— μœ λ¦¬ν•¨

βœ…6️⃣ 정리.

  • βœ… μ΅œλŒ€ 2 Depth ꡬ쑰 ➞ parent_comment_idλ₯Ό ν™œμš©ν•΄ λΆ€λͺ¨-μžμ‹ 관계 μœ μ§€
  • βœ… μ •λ ¬ μˆœμ„œ ➞ ORDER BY parent_comment_id ASC, comment_id ASC
  • βœ… 쑰회 κ²°κ³Ό ➞ λΆ€λͺ¨ λŒ“κΈ€μ΄ λ¨Όμ €, λŒ€λŒ“κΈ€μ΄ 뒀에 정렬됨
  • βœ… νŽ˜μ΄μ§• κ°€λŠ₯ ➞ LIMIT ?, ?λ₯Ό ν™œμš©ν•˜μ—¬ 였래된 순으둜 νŽ˜μ΄μ§• 처리