2009-08-16 1 views
0

기본적으로 인트라넷 용 작은 포럼 스크립트를 작성하고 있습니다. 나는 3 MySQL은 (MySQLi) 포럼에 대한 테이블이있어포럼, 최근 게시물/주제보기

: 첫 번째 게시물 forum_categories를 보유 - - - - - 보유 답변 forum_question

forum_answer 이름과 범주의 설명을 보유하고 있습니다.

포럼 색인에서 모든 카테고리를 가져올 수있는 테이블이 있지만 그 카테고리/포럼에서 마지막으로 작성한 게시물을 가져올 컬럼이 하나 있습니다.

포럼에서 마지막으로 올린 글을 얻는 방법에 대한 아이디어가 있습니까?

forum_categories 테이블에 새 열을 추가하고 게시물이 만들어 질 때마다 업데이트하는 것이 좋겠다고 생각했지만 지저분해질 수 있습니다.

감사합니다 :)

+0

각 게시물에 날짜 입력란이 없습니까? –

+0

그래도 답장과 첫 번째 게시물을 모두 주문하려면 어떻게해야합니까? – bear

답변

2

쿼리 현명한, 당신은 유사한 것을 사용 범주의 목록을 얻으려면 쿼리를 얻을 수 있습니다. 사람들이 자주 게시하는 경우 다른 사람이 게시 할 때마다 범주의 열을 업데이트 할 수 있습니다. 사람들이 범주 목록을 자주로드하는 경우 조인은 더 비싼 작업 일 수 있습니다. 이 테이블 것처럼 당신이 다음에 액세스 할 수

create view category_list as 
select forum_categories.id, forum_categories.name, max(forum_answer.id) as latest_asnwer_id 
from forum_categories 
left join forum_questions on forum_questins.category_id = forum_categories.category_id 
left join forum_answers on forum_answers.question_id = forum_questions.question_id 
group by forum_categories.id, forum_categories.name 

:

당신은 또한 이익에서 카테고리 목록을 뽑아 뷰를 만들 찾을 수 있습니다.

+0

재미있는, 내가보기를 만들려고했는데, 그것은 단지 하나의 카테고리에 대한 않았다. – bear

+0

아, max (forum_answer.id)가 최신 응답 만받습니다. 이는 우리가 필요로하지 않는 것입니다. – bear

+0

아, 나는 group by 절을 무시했다. 포함하는 모든 forum_categories 열을 기준으로 그룹화해야합니다. 나는 나의 대답을 설명하기 위해 업데이트했다. –

1

당신은 실제로는 올바른 방향으로 생각하고있다.

질문에 대한 마지막 게시물과 포럼의 마지막 게시물을 분명히 캐시하여 [forum_question] 및 [forum_categories] 테이블에 각각 저장해야합니다. 누군가가 새 게시물을 추가하거나 게시물을 삭제할 때마다 "캐시"의미가 업데이트됩니다.

포럼 콘텐츠의 양이 임계 값에 도달하면 마지막 게시물의 실시간 계산이 크게 느려집니다. 새로운 게시물이 제출 될 때마다 "캐시"를 업데이트함으로써이 대규모 일회성 계산 작업을 많은 요청에 분산되어 거의 눈에 띄지 않는 작은 업데이트로 나눕니다.

게시물을 삭제할 때 얻을 수있는 유일한 히트는 질문 및 포럼의 캐시를 업데이트해야합니다. 그러나 이것은 드물기 때문에 가격을 낼 수 있습니다. 그것이 작동이 포럼의 성격에 따라 달라 비싼

select forum_categories.id, forum_categories.name, max(forum_answer.id) as 
from forum_categories 
left join forum_questions on forum_questins.category_id = forum_categories.category_id 
left join forum_answers on forum_answers.question_id = forum_questions.question_id 
group by forum_categories.id, forum_categories.name 

:

+0

좋아, 그 문제가 있어요 :/ – bear