2009-08-16 28 views
0

基本的に、私はイントラネットのための小さなフォーラムスクリプトを書いています。私は3 mysqlの(MySQLiを)フォーラムのテーブル持ってフォーラム、最後のポストを取得/トピック

:最初の投稿 forum_categoriesを保持している - - - 保持回答 forum_question

forum_answerは名前とカテゴリの説明を保持しています。

フォーラムのインデックスでは、すべてのカテゴリを取得するための表がありますが、そのカテゴリ/フォーラムで最後に投稿された投稿を取得する列も1つあります。

フォーラムで最後に投稿された記事をどのように入手できるかについてのアイデアはありますか?

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

興味深いことに、私はビューを作成しようとしたときに、それは1つのカテゴリのためにそれをしました。 – bear

+0

ああ、max(forum_answer.id)を持っているのは私たちが必要としていない最新の返信だけです。 – bear

+0

ああ、私はgroup by節を無視しました。含まれるすべてのforum_categories列でグループ化する必要があります。私は答えを説明するために更新しました。 –

1

あなたは実際に正しい方向に考えています。

質問の最終投稿とフォーラムの最後の投稿を確実に "キャッシュ"して[forum_question]と[forum_categories]テーブルにそれぞれ保存する必要があります。誰かが新しい投稿を追加するか、投稿を削除するたびに、「キャッシュ」という意味が更新されます。

フォーラムコンテンツの量がある閾値に達すると、最後の投稿のライブ計算が極端に遅くなります。新しい投稿が送信されるたびに「キャッシュ」を更新することで、この巨大な1回限りの計算作業を、多くのリクエストに分散された小さなアップデートに分割し、ほとんど目立たないようにします。

投稿を削除したときに唯一ヒットした場合は、質問とフォーラムのキャッシュを更新する必要があります。しかし、これはまれな出来事なので、価格を引き上げることができます。それは操作があなたのフォーラムの性質に依存してどのように高価な

​​

+0

OK、私はそれに問題があります:/ – bear

関連する問題