뭔가 작업하는 데 문제가 있습니다. 난 그냥 온라인으로 스레드 주석 예제를 사용하여 수동으로 입력 된 데이터에 대해 그것을 테스트하고 완벽하게 작동합니다.스레딩/중첩/간접적 인 설명
는 그러나이 설정은 좀 이상하다. PATH 메소드를 사용하므로 첫 번째 주석의 경로는 01이고, 해당 주석에 대한 응답은 01_01 경로이고 첫 번째 주석에 대한 다른 응답은 01_02입니다. 내 스크린 샷 (위)에서 각 이름 옆의 상대 경로를 볼 수 있습니다.
이 방법은 많은 의견에 대해 테스트 해본 결과 매우 잘 수행됩니다. 문제는 다음 회신 경로를 계산하는 것입니다. 예를 들어 내 사용자가 01_01_01의 경로가있는 Jeremy Clarkson의 댓글에서 [답장]을 클릭했다고 가정 해 보겠습니다. 다음 순서는 01_01_02이지만 Kim Bauer의 의견에 이미 사용되었습니다. 나는 약간의 쿼리 SELECT * FROM comments WHERE path LIKE '01_01_%'
을 할 수 있고 마지막 행을 선택하고 1을 더할 수 있다고 생각했지만 Chloe O'Brien의 코멘트는 01_01_01_01이며이 결과에 영향을 미친다.
회신에 대한 다음 올바른 경로를 계산할 수있는 사람을 설명해주십시오.
는내 수정 :
내가이 일을하여 다음 사용 가능한 경로를 계산은 :
:SELECT path
FROM blog_comments
WHERE path LIKE '01_01___'
ORDER BY path DESC
LIMIT 1
$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;
사람이이 방법을 사용하려는 경우, 인쇄는 다음과 같이 간다
$SQL = "SELECT * FROM comments ORDER BY path ASC;"; while($row = $STH->fetch()) { $nesting_depth = strlen($row['path']) - strlen(str_replace('_','',$row['path'])); $left_margin = $nesting_depth * 40; // 40 pixels nesting indent echo '<div class="comment_item" style="margin-left:'.$left_margin.'px;">'; echo '<strong>'.htmlspecialchars($row['author_name']).'<br>'; echo htmlspecialchars($row['comment']).'<br>'; echo '</div>'; }
경로 아이디어를 삭제하고 간단한 'id', 'parentid'솔루션을 사용하는 것이 좋습니다. – PeeHaa
@PeeHaa :이 솔루션을 2 시간 더 기다려주세요. 그러면 id> parent_id 메소드로 전환 할 수 있습니다 :) – ShadowStorm
parentID 다음으로, 중첩 된 세트에 대해 조금 배우고 싶을 것입니다. 각각의 방법에는 장단점이 있으므로 더 많은 대안을위한 다양한 접근법을 아는 것이 좋습니다. – hakre