>  기사  >  백엔드 개발  >  기사 댓글(NetEase 뉴스 댓글 형식)의 중첩된 표시를 위해 mysql 테이블 구조를 디자인하는 방법

기사 댓글(NetEase 뉴스 댓글 형식)의 중첩된 표시를 위해 mysql 테이블 구조를 디자인하는 방법

WBOY
WBOY원래의
2016-12-01 00:56:452273검색

이제 포스트 테이블이 생겼습니다(구조는 변경할 수 없습니다)
tid topic pid
pid reply id

이제 새로운 댓글 중첩 표시 기능이 추가되었습니다. 즉, tid=1
a가 pid 1로 댓글에 댓글을 달았습니다
b가 a의 댓글에 pid 2로 답글을 달았습니다
c가 댓글에 답했습니다 pid가 2 3인 b의 댓글
d는 pid 4

로 답장했습니다.

은 1층에
pid1
2층에 pid1, pid2
3층에 pid1, pid2, pid3
4층에 pid1, pid4
로 표시됩니다. 즉, 다른 사람에 대한 모든 답변은 이전의 모든 답변을 인용해야 합니다.
(형식은 NetEase News 댓글과 동일합니다)
현재 생각하고 있는 구조는 post_conversation pid, to_pid
이렇게 하면 2층 답글에 2,1이 삽입됩니다

<code> 3楼回复就插入两条     3,1
                     3,2
 4楼回复就插入         4,1          </code>

99층에서 대화가 발생하면 98개의 데이터를 삽입해야 합니다

<code>这样有个好处就是可以很方便取出任意一个pid的评论情况
select topid from post_conversation  where pid = 'xxx' order by pid ;
但是会造成多的重复数据  一个99楼对话得插入1+2+3+。。。+99条
</code>

post_conversation을 이렇게 설계하면
pid, parent_pid(replyed pid)
데이터의 양이 적습니다(답장당 하나의 메시지만 삽입됩니다).
그러나 각 pid에 대해 모든 대화를 쿼리하는 것은 매우 어려운 문제입니다(데이터베이스를 재귀적으로 쿼리하려고 생각 중입니다).

<code>select parent_pid from post_conversation  where pid = 'xxx'
    select parent_pid from post_conversation  where pid = 'parent_pid '
        ...
        一直到parent_pid 为0为止,查询出所有的对话pid
</code>

좋은 제안이 있으신가요

답글 내용:

이제 포스트 테이블이 생겼습니다(구조는 변경할 수 없습니다)
tid topic pid
pid reply id

이제 새로운 댓글 중첩 표시 기능이 추가되었습니다. 즉, tid=1
a가 pid 1로 댓글에 댓글을 달았습니다
b가 a의 댓글에 pid 2로 답글을 달았습니다
c가 댓글에 답했습니다 pid가 3인 b의 댓글
d가 pid 4

로 답장했습니다.

은 1층에
pid1
2층에 pid1, pid2
3층에 pid1, pid2, pid3
4층에 pid1, pid4
로 표시됩니다. 즉, 다른 사람에 대한 모든 답변은 이전의 모든 답변을 인용해야 합니다.
(형식은 NetEase News 댓글과 동일합니다)
현재 생각하고 있는 구조는 post_conversation pid, to_pid
이렇게 하면 2층 답글에 2,1이 삽입됩니다

<code> 3楼回复就插入两条     3,1
                     3,2
 4楼回复就插入         4,1          </code>

99층에서 대화가 발생하면 98개의 데이터를 삽입해야 합니다

<code>这样有个好处就是可以很方便取出任意一个pid的评论情况
select topid from post_conversation  where pid = 'xxx' order by pid ;
但是会造成多的重复数据  一个99楼对话得插入1+2+3+。。。+99条
</code>

post_conversation을 이렇게 설계하면
pid, parent_pid(replyed pid)
데이터의 양이 적습니다(답장당 하나의 메시지만 삽입됩니다).
그러나 각 pid에 대해 모든 대화를 쿼리하는 것은 매우 어려운 문제입니다(데이터베이스를 재귀적으로 쿼리하려고 생각 중입니다).

<code>select parent_pid from post_conversation  where pid = 'xxx'
    select parent_pid from post_conversation  where pid = 'parent_pid '
        ...
        一直到parent_pid 为0为止,查询出所有的对话pid
</code>

좋은 제안이 있으신가요

초대해주셔서 감사합니다
무한 중첩(메뉴, 댓글)을 달성하기 위해 가장 원시적인 재귀 쿼리 방법을 사용하곤 했습니다. 나중에 Laravel-China 커뮤니티에서 관리자가 게시한 글을 보았는데, 글 주소는 https://laravel-china.org/topics/2124 인데, 预排序遍历树算法(Nested set model)를 사용하여 무한한 트리형 계층 모델(태그)을 구현한 것입니다. 시스템, 메뉴 시스템, 댓글 시스템 등). 주제는 다음을 참조할 수 있습니다.

'댓글 인용'은 구현 비용이 상대적으로 높으며 중복성이 많습니다. 대신 '댓글에 답글'을 사용하는 것을 고려해 보세요.
하나의 기사는 여러 개의 댓글에 해당하고, 하나의 댓글은 여러 개의 답글에 해당합니다.
Q&A 커뮤니티인 Segmentfault.com과 Tencent News는 모두 "댓글에 대한 답변"을 사용합니다.
Segmentfault를 예로 들어보겠습니다.
질문자(원본 게시자)가 질문을 게시했는데 이 질문에는 여러 답변이 있습니다(플로어 소유자). ). 데이터베이스는 일대다 관계입니다.
각 답변에는 여러 개의 응답이 있을 수 있으며, 이 역시 일대다 관계입니다.

<code>question(id,            user_id,content)
answer  (id,question_id,user_id,content)
reply   (id,answer_id,  user_id,content)</code>
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.