2012-10-26 9 views
-1

내가 하나 개의 테이블이 cf_postsPHP/MySQL을 포럼 후 주문

ID pk 
user INT 
subject VARCHAR 
body TEXT 
datetime TIMESTAMP 
parent INT 
category INT 
mod INT 

라고 한 다음 부모 인 원래 게시물의 ID입니다.

포럼 메인 페이지의 기본보기가 가장 최근에 업데이트 된 게시물 (최신 답장 포함)이 파일의 "맨 위에"오고 날짜 순서대로 작업하도록 주문할 수있는 방법은 무엇입니까? ? PHP/MySQL 쿼리는 무엇이 될까요?

필자가 보았던 유일한 해결 방법은 별도의 항목과 회신 표이지만 가능한 경우이 방법을 사용하지 않으려합니다.

내가 시도한 하나의 해결 방법은 GROUP BY 부모입니다. 하지만 답장이없는 모든 주제가 하나로 그룹화되었습니다.

아직 시도해 보지 못한 또 다른 아이디어는 원래 게시물의 부모 ID를 게시물 ID와 일치시키고 출력에 일치하는 ID 및 상위 ID를 포함시키지 않는 것입니다.

나는 당신의 생각을 듣기를 고대합니다.

+0

별도의 주제와 응답 테이블에서 벗어나는 이유는 무엇입니까? – raidenace

+0

@Raidenace 주제가 특별한 게시물 일 뿐이며 별도의 테이블을 만들 필요가 없습니다. – NullUserException

+0

아마도 부모가 없기 때문에 주제가 맞는지 확인할 수 있습니다. (매트?) –

답변

0
SELECT mainPost.subject, lastPost.datetime 
FROM cf_posts cfp, 
(
SELECT * 
FROM cf_posts subPost 
WHERE subPost.parent = mainPost 
ORDER BY subPost.datetime DESC 
LIMIT 1 
)lastPost 
WHERE mainPost.parent IS NULL 

이것은 간단히 끝났으므로 일부 구문 문제가있을 수 있지만 도움이 될 것이라고 생각합니다.

0

당신은 다음과 같이 할 수 있습니다 : 당신이 필요로하는 각각의 별도의 것을 쿼리하십시오, 아마도 각 주제에 대한 쿼리입니다. 그런 다음 UNION을 사용하여 모든 항목을 묶어서 하나의 목록을 얻을 수 있습니다. 이제 주문을 보존하는 트릭은 다음과 같습니다. 각각의 개별 쿼리에 대해 sort라는 반환 결과에 열을 추가하고 그 각각의 인스턴스를 높은 int 값으로 설정하면 최종 결과가 올바르게 정렬되도록 보장 할 수 있습니다. 내가 선택한 것에 대해 더 잘 이해할 수 있도록 select 문에 대해 UNION을 검토하십시오.