누구나 독창적 인 데이터베이스 구조 + 스레드 별 주석 시스템을위한 페칭 알고리즘을 제안 할 수 있습니다. 페이지 당 스레드 수가 x만큼 씩 출력됩니다 (각각에 무제한 응답이 가능)?1 또는 2 개의 쿼리로 스레드 주석을 작성하는 방법은 무엇입니까?
쿼리를 실행하여 스레드를 얻을 수 있으며 루프의 각 인스턴스에서 다른 쿼리를 실행하여 응답을 에코 할 수 있습니다.하지만 그 생각은 잘못되었습니다.
누구나 독창적 인 데이터베이스 구조 + 스레드 별 주석 시스템을위한 페칭 알고리즘을 제안 할 수 있습니다. 페이지 당 스레드 수가 x만큼 씩 출력됩니다 (각각에 무제한 응답이 가능)?1 또는 2 개의 쿼리로 스레드 주석을 작성하는 방법은 무엇입니까?
쿼리를 실행하여 스레드를 얻을 수 있으며 루프의 각 인스턴스에서 다른 쿼리를 실행하여 응답을 에코 할 수 있습니다.하지만 그 생각은 잘못되었습니다.
댓글 테이블에 parentCommentId 및 rootCommentId라는 두 개의 열을 추가합니다.
parentCommentId는 상위 주석의 ID이고 rootCommentId는이 스레드를 시작한 주석의 ID입니다. rootCommentId = ID
에 대한 모든 의견을 얻을 경우 (주석 테이블에서
두 레벨 만 있으면 다음과 같은 쿼리를 사용할 수 있습니다.
테이블-id, parent_id, comment
열 $threads
에서
$rows = mysql_query('
select *
FROM
comments
ORDER BY
id DESC');
$threads = array();
foreach($rows as $row) {
if($row['parent_id'] === '0') {
$threads[$row['id']] = array(
'comment' => $row['comment'],
'replies' => array()
);
} else {
$threads[$row['parent_id']]['replies'][] = $row['comment'];
}
}
당신이 당신의 주요 스레드를하고 $threads[$id]['replies']
이 모든 답장을 보유하고
코드입니다. 스레드가 정렬됩니다 - 최신 = 처음, 일부 페이징을 추가하고 당신은 좋은거야.
이것은 지금 사용하고있는 것과 비슷합니다. 유일한 까다로운 부분은 누군가가 의견에 응답 할 때 삽입 할 다음 회신 경로를 계산하는 것입니다.
예 데이터
ID | Comment | Path
---+------------------------------+----------
0 | Comment #1 | 01
1 | Comment #1 reply | 01_01
2 | Comment #1 reply reply | 01_01_01
3 | Comment #1 reply reply | 01_01_02
4 | Comment #2 | 02
5 | Comment #3 | 03
6 | Comment #3 reply | 03_01
예 SQL
SELECT * FROM comments ORDER BY path
예 PHP
while ($result = mysql_fetch_assoc($query)) {
$nesting_depth = count(explode("_", $result['path']));
$branch = str_repeat("--", $nesting_depth);
echo $branch {$result['comment']}";
}
예는
Comment #1
-- Comment #1 reply
---- Comment #1 reply reply
---- Comment #1 reply reply
Comment #2
Comment #3
-- Comment #3 reply
가 (자신의 답변 포함) 응답이 10 개 개의 게시물이 쿼리를 제한 할 방법
SELECT path FROM comments WHERE path LIKE '01\_01\___'
$last_path = $row[0];
$last_path_suffix = substr($last_path,strrpos($last_path,'_')+1);
$next_path_suffix = str_pad($last_path_suffix+1,2,'0',STR_PAD_LEFT);
$next_path = substr($last_path,0,strlen($last_path)-strlen($last_path_suffix)).$next_path_suffix;
을 01_01 할 수 있도록 결과? 'LIMIT 10'을 사용하면 10 행만 반환되며 부모 또는 자식인지 여부는 중요하지 않습니다. 이 경우 페이지 매김은 어떻게 작동합니까? 또한, 나는 파티에 늦었다는 것을 알고 있습니다.^ _^ – Bastien
@Bastien이 설정으로 페이지 매김 또는 "추가 설명로드"방법을 알아 냈습니까? – Nathan