2012-06-07 4 views
0

나는 대답을 잠시 찾고 있었고 하나도 이해하지 못하는 것 같아서 여기 누군가가 도울 수 있기를 바란다. 나는 단지 노력하고있다. 한 페이지에 XX 주석 만 표시하고 중첩 된/스레드 된 주석 프로세스를 허용하며 사용자가 1,000s가 넘는 주석을 가질 수있는 경우 한 페이지에 모든 주석을 표시 할 필요가없는 방법을 찾아야합니다. 만약 내가 그렇게 할 수 있다면, 2 대신에 하나의 mysql 쿼리로이 작업을하려고한다.PHP MySQL, 페이지가있는 중첩 된/스레드 된 주석, 제한적 10 오프셋 ect

Heres는 내 MySQL의 테이블

CREATE TABLE IF NOT EXISTS `comments_threaded` (
`id` bigint(255) NOT NULL AUTO_INCREMENT, 
`toUid` bigint(255) NOT NULL, 
`fromUid` bigint(255) NOT NULL, 
`Pid` bigint(255) NOT NULL, 
`Puid` bigint(255) NOT NULL, 
`Pseen` int(2) NOT NULL, 
`seen` int(2) NOT NULL, 
`comment` text NOT NULL, 
`tim` int(20) NOT NULL, 
`Pip` varchar(30) NOT NULL, 
PRIMARY KEY (`id`), 
KEY `toUid` (`toUid`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ; 

ID를 (그 새 테이블이 필요한 경우 그래서 변경할 수 있습니다 아직 발표되지 않음) = 코멘트 자동차의 ID는
어떤 프로필/사용자에 대한 toUid =입니다 증가의에
fromUid = 누가 부모 사용자가 코멘트,117,351 볼 경우
pid는 PUID 부모 ID
Pseen =의 사용자 ID 번호를 =
부모 ID의 ID를 .. =에서 주석입니다 toUid이 댓글이
댓글이 = fromUid 남긴 댓글이
팀 =이
의 pid 방치() 시간이 사람이

anways을 IP = 볼 경우3210 은 =, 나는하기 위해 노력하고있어 본 적 사용자 프로필에 댓글을 달았습니다. 사용자 프로필에 답장을 올리려면 이전/부모 댓글에 대한 답장이 포함되어 있습니다.
페이지의 주석 수를 10 개 또는 20 개로 제한하고 싶습니다.이 숫자는 중첩 된 주석을 포함 할 것입니다.

예를 들어 10 개를 원하면 첫 댓글이 그들이에 대답하고 원래의 부모의 의견을 함께 시작할 것이라고 다른 의견에 대한 회신 될 경우 페이지에 대한 의견은

comment 1 
--comment 2 replied to comment 1 
--comment 3 replied to comment 1 
----comment 4 replied to comment 3 
------comment 5 replied to comment 4 
comment 6 
--comment 7 replied to comment 6 
--comment 8 replied to comment 6 
comment 9 
--comment 10 replied to comment 9 

1 다음 2 페이지, 모든 경우 여전히 수있을 단지 그 페이지에 10 개의 코멘트를 유지하십시오. 상단에 여분의 코멘트가있는 것이 좋지 않거나 페이지 하단의 1 페이지에 여분의 코멘트가 표시되는 것이 좋을 것 같습니다. 어떤 것이 더 쉬울 지 잘 모르겠습니다.

SELECT id, fromUid, Pseen, seen, comment, tim 
FROM comments_threaded 
WHERE toUid = '".mysql_real_escape_string($toUid)."' 
    OR Pid IN (
     SELECT id, fromUid, Pseen, seen, comment, tim 
     FROM comments_threaded 
     WHERE toUid = '".mysql_real_escape_string($toUid)."' 
    ) 
LIMIT 10 

을 나는했습니다

Operand should contain 1 column(s) 

을 받고 -

comment 9 
--comment 10 replied to comment 9 
----comment 11 replied to comment 10 
----comment 12 replied to comment 10 
--comment 13 replied to comment 12 
comment 13 
comment 14 
--comment 15 replied to comment 14 
--comment 16 replied to comment 14 
----comment 17 replied to comment 16 
----comment 18 replied to comment 17 
--comment 19 replied to comment 17 
comment 20 

내가 이런 짓을 했을까 절에 MySQL을 생각했지만, 난 오류가 받고 있어요는 ... "시도 전에 본적이 없습니다.

가능하다면 찾아보고 도움을 주심 감사합니다.

답변

2

IN()에서 하위 쿼리를 사용하는 경우 해당 하위 쿼리는 1을 선택하고 1 열만 선택해야합니다. 귀하의 선택입니다.

또한 이러한 종류의 중첩 된 콘텐츠에 대해 중첩 된 집합 모델을 사용하는 것이 좋습니다.

+0

감사합니다. IN()이 1 열을 선택한다고 가정 했으므로 IN()을 사용 했으므로 잠시있었습니다.그리고 중첩 된 세트 모델을보고 있었고 업데이트가 필요한 수천 개의 행이 있으면 서버가 느려지면서 몇 가지 문제가 발생할 수 있다고 생각합니다. 주위에 다른 방법이있을 것이라고 생각하고 있습니다. 계속 공부하겠습니다. – Yohn

+0

아마도 처음에는 최상위 레벨의 댓글 만 표시하고, 사용자는 AJAX 요청을 통해 추가 데이터를 가져 오는 무언가를 클릭하여 중첩 된 댓글을 볼 수 있습니다. 이렇게하면 중첩 세트는 필요 없으며 단지'parent_id' 컬럼 만 필요합니다. 또한 인터페이스가 개선되었습니다. 귀하의 인터페이스는 실제로 이해할 수 있듯이 심각한 문제가 있습니다. 처음 게시물에 20 개의 응답이 있다고 가정 해보십시오. 그런 다음 첫 번째 응답에는 20 개의 응답이 있습니다. 당신의 계획은 이것을 잘 처리하지 못하는 것 같습니다. – Okonomiyaki3000