0

基本的に、私はイントラネット用の小さなフォーラムスクリプトを書いています。

フォーラム用に3つのmysql(MySQLi)テーブルがあります。

forum_answer-返信を保持しますforum_question-最初の投稿を保持しますforum_categories-カテゴリの名前と説明を保持します。

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

そのフォーラムで最後の投稿を作成する方法について何かアイデアはありますか?

forum_categoriesテーブルに新しい列を追加し、投稿が行われるたびにそれを更新することを考えていましたが、それは面倒になる可能性があります。

ありがとう :)

4

2 に答える 2

2

クエリに関しては、クエリで取得して、次のようなものを使用してカテゴリのリストを取得できます。

 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

操作にかかる費用は、フォーラムの性質によって異なります。誰かが頻繁に投稿している場合、誰かが投稿するたびにカテゴリの列を更新すると、費用が高くなる可能性があります。人々がカテゴリのリストを頻繁にロードしている場合、結合はよりコストのかかる操作になる可能性があります。

また、以下からカテゴリリストを取得するためのビューを作成すると便利な場合があります。

 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

その後、テーブルであるかのようにアクセスできます。

于 2009-08-16T20:36:15.777 に答える
1

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

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

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

投稿を削除したときに得られる唯一のヒットは、質問とフォーラムのキャッシュを更新する必要があります。しかし、これはまれなイベントであるため、価格を手頃な価格で提供できます。

于 2009-08-16T20:10:44.200 に答える