웹 애플리케이션을 위해 여러 페이지에서 중첩 토론을 분리하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/582315

문제

SlashDot 또는 YouTube에 대한 주석과 같이 PHP/MySQL 응용 프로그램에 대한 스레드 메시지 디스플레이를 디자인하고 있으며, 주석을 주문하고 페이지로 분리하여 페이지에 20 개의 의견을 표시 할 수 있도록 어떻게 해야하는지 궁금합니다. 그러나 여전히 그들을 중첩시켰다.

내 앱의 주석은 무제한 레벨 중첩 될 수 있으며이 구조는 내가 믿는 인접성 관계 테이블을 사용하여 표현됩니다. 그 관계 테이블에는 2의 레벨이 "증조부"를 의미하는 Childid, Parentid 및 레벨이 있습니다.

내 질문은 최종 사용자의 유용성과 효율적인 DB 쿼리를 구성하는 실용성 중 하나입니다. 나는 다음 옵션을 고려했다.

  • 트리의 위치에 관계없이 결과를 날짜별로 나누기 때문에 특정 날짜 범위 내의 모든 의견이 부모와 함께 나타나지 않더라도 함께 나타납니다. 부모와 비슷한 시간에 게시 된 모든 의견은 같은 페이지에 표시되며 그러한 경우에는 '중첩'을 표시 할 수 있지만 부모로부터 고아가 된 의견이 있습니다. 이것은 아마도 허용 될 것입니다 - 그것은 YouTube 의견에서 일이 수행되는 방식입니다. 부모보다 훨씬 늦게 작성된 의견은 부모와 같은 페이지에 나타나지 않을 것입니다 (부모가 최신 페이지에 있지 않은 경우). 다른 최신 의견.

  • 트리를 가로 질러 순서대로 노드를 검색합니다. 형제 자매는 여전히 날짜별로 정렬 할 수 있지만 날짜가 아닌 트리 구조에 우선 순위를 부여합니다. 이에 대한 이점은 부모가 가장 최근의 의견에서 많은 페이지 인 경우에도 답장이 항상 부모와 함께 배치된다는 것입니다. 이것은 Icanhascheezburger 블로그와 같은 앱에서 작업이 수행되는 방식입니다. 나는 모든 사람들이 가장 큰 나무 지점에 대한 답변을 추가하려는 유혹을받는 것처럼 그것에 대해 몇 가지를 좋아하지 않습니다.

  • 세 번째 옵션은 Slashdot과 같은 것을하는 것입니다. 여기서 주석을 페이지로 분리하지는 않지만 하나의 큰 트리가있는 것입니다.

첫 번째는 내 관계 테이블이 주어진 가장 간단한 DB 쿼리라고 생각하지만 다른 아이디어에 열려있을 것입니다.

세 종류의 일부 시스템은 어떤 방식 으로든 중첩 수준을 제한합니다. 이는 X 레벨을 통해 재발 한 후에는 다른 모든 것이 형제 인 것처럼 함께 결합 할 수 있습니다. 예를 들어 YouTube 주석은 한 레벨로만 렌더링됩니다. 다른 시스템은 때때로 5 개 정도의 레벨 이후에 "중첩 수준을 초과"한다고 말합니다.

도움이 되었습니까?

해결책

중첩 된 의견을 전혀 원하는 이유는 사용자가 한 번에 단일 관심사를 읽고 싶어하기 때문입니다. 즉, 사용자가 일관된 사고 사슬의 스레드를 생성 할 것이라고 믿는 이유가 있으며,/또는 한 스레드에서 논의되는 것은 일부 사용자에게 관심을 가질 것입니다.

이 경우, 왜 날짜 (옵션 1)별로 페이지 전체에 스레드를 임의로 분할하고 싶은 이유를 모르겠습니다. 낮은 등급의 주석 (옵션 3)을 컬링하는 단일 페이지를 사용하는 것은 약간 가혹한 것처럼 보이며 사용자가 의견을 게시하는 것을 방해 할 수 있습니다. Slashdot과 같은 잠재 고객 질량이 있다면 좋은 일이지만보다 일반적인 방문률이있는 사이트에는 바람직하지 않을 수 있습니다.

아마도 같은 페이지에 모든 스레드가있는 옵션 2와 같은 것을 가질 수 있지만 스레드가 너무 길어지기 시작하면 사용자를 해당 스레드 전용 페이지로 가져가는 단일 링크로 롤업됩니다. 또는 긴 스레드를 줄이면 제목 줄과 저자를 표시하여 스레드의 전용 페이지의 적절한 위치로 연결됩니다.

사용자가 가장 큰 스레드에 관련없는 의견을 게시하는 경향은 스레드의 끝을 찾기 위해 스크롤을 귀찮게하고 싶지 않은 사용자의 제품이라고 생각합니다. 긴 스레드를 자동으로 압축하여 모든 스레드의 루트를 관리 가능한 길이의 단일 페이지에 표시함으로써 사용자는 관심있는 스레드를 쉽게 스캔하고 원하는 경우 추가 할 수 있습니다.

다른 팁

필요한 것은 계층 적 데이터를 데이터베이스에 저장하는 것입니다. 이 기사로 시작해야합니다.SitePoint의 기사 MySQL 웹 사이트의 기사

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top