2013-01-09 2 views
0

나는 포럼을 만들고 있는데, 몇 가지 문제가있었습니다.각 카테고리의 최근 게시물 가져 오기 - 포럼

기본 데이터베이스 구조는 다음과 같습니다

users 
| user_id | username 

categories 
| category_id | category_name | 

forum_posts 
| post_id | ref_post_id (FK) | ref_category_id (FK) | ref_user_id (FK) | post_date | 

ref_post_id 그것이 제목이 스레드의 주요 포스트 뜻 0 인 경우. 스레드에 대한 답은 ref_post_id는 메인 게시물의 post_id와 동일합니다. 난 당신이 이해 바랍니다.

각 카테고리의 최신 게시물은 어떻게 받습니까? 게시물 스레드 제목과 사용자 테이블의 사용자 이름을 포함합니다. 내 테이블 구조를 변경하고 카테고리 테이블 또는 "latest_post_id"필드를 추가해야합니까?

매우 도움이됩니다. 비슷한 질문이 있다는 것도 알고 있지만, latest_post_id와 그 모든 것을 카테고리 테이블에 저장해야하는지, 각 페이지로드시 모든 것을 검색하는 거대한 쿼리를 가지고 있는지 궁금합니다.

편집 2 : 여기 내 현재 쿼리입니다 :

SELECT category_id, name, 
(SELECT COUNT(*) FROM forum_posts WHERE ref_category_id = category_id AND ref_post_id = 0) count_threads 
(
SELECT title, ref_user_id, username FROM forum_posts 
LEFT JOIN users ON user_id =  ref_user_id 
WHERE latest_post_id = (SELECT MAX(latest_post_id) FROM forum_posts WHERE ref_category_id = category_id LIMIT 1) 
) 
FROM forum_categories 
+0

사용하는 RDBMS post_id의 필드를 사용 :

최신 게시물을 얻을 수 있습니까? – sgeddes

+0

이것이 포럼 목록의 모든 페이지로드시에 표시되면, 포럼 테이블에 캐시 된'most_recent_post_id' 또는 유사한 것을 보유하는 것이 좋습니다. 새 게시물 작성/편집/어떤 논리를 선택 하든지 업데이트하십시오. 그런 다음 가장 최근 게시물을 표시하는 것은 여러 쿼리 나 하위 쿼리와 반대되는 'JOIN'만큼 쉽습니다. –

답변

0

당신은 당신이 (맥스를 사용하지 않는 경우, MAX 날짜로 하나를 얻을 필요가 작성 날짜가있는 경우 post_id). 그러나 사용자가 자신의 게시물을 편집하게하고 최신 항목을 작성하거나 편집하려면 데이터베이스에 수정 날짜를 추가해야합니다. 당신이 날짜를 사용하는 경우

SELECT * FROM forum_posts p 
INNER JOIN users u ON p.ref_user_id=u.user_id 
WHERE `post_id`=(SELECT max(`post_id`) FROM forum_posts WHERE ref_category_id=$value); 

, 단지 대신

+0

어떻게 사용자 이름을 얻을 수 있습니까? 그리고 제목? 최근 게시물을 검색하지 않는 현재 쿼리로 내 질문을 업데이트했습니다. – lawls

+0

FK를 사용하여 JOIN을 사용해야하는 일반 값을 가져 오려면 내 쿼리가 forum_posts 테이블의 모든 항목을 검색합니다. 내 예제 – Naryl

+0

을'JOIN'으로 업데이트하면 사용자의 정보도 얻을 수 있습니다. – Naryl

관련 문제