8

コメントできるオブジェクトがいくつかある PHP アプリに取り組んでいます。各コメントは投票でき、ユーザーは +1 または -1 を付けることができます (Digg や Reddit のように)。現在、user_id とその投票情報を保持する「votes」テーブルを計画していますが、これはうまく機能しているようです。

問題は、各オブジェクトには数百のコメントがあり、それらが個別のコメント テーブルに格納されているということです。コメントを読み込んだ後、投票を集計し、ユーザーに対する各投票を個別にチェックして、ユーザーが 1 回しか投票できないことを確認する必要があります。これは機能しますが、データベースを集中的に使用しているように見えます-コメントだけのための多くのクエリ。

DB への負担が少なく、これを行うためのより簡単な方法はありますか? 現在のデータベース構造は最善の方法ですか?

現在のデータベース構造をより明確にするには:

コメント表:

  • ユーザーID
  • object_id
  • total_votes

投票表:

  • comment_id
  • ユーザーID
  • 投票

最終目標:

  • 最小数の MySQL クエリで各コメントにユーザーが 1 回だけ投票できるようにする (各オブジェクトには複数のコメントがあります)
4

3 に答える 3

11

各有権者が 1 回だけ投票するようにするには、CommentID、UserID、VoteValue の各フィールドを使用して Votes テーブルを設計します。CommentID と UserID を主キーにします。これにより、1 人のユーザーが 1 票しか得られないことが保証されます。次に、コメントの投票を照会するには、次のようにします。

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?

それは役に立ちますか?

于 2009-05-01T02:12:37.097 に答える
0

コメントごとに合計投票数を保存しませんか? 新しい投票が発生したときにこれを増減します。

次に、ユーザーがこのコメントに具体的に投票したかどうかを確認して、ユーザーごとにコメントごとに 1 つの投票のみを許可する必要があります。

于 2009-05-01T02:15:50.003 に答える
0

このオブジェクトに対して現在のユーザーが行ったコメントに対するすべての投票を返す sql 結合条件を配置できます。行を取得しない場合、ユーザーは投票していません。これは、プログラムで各コメントを 1 つずつチェックするのとは少し異なります。

データベース構造に関する限り、これらを別々に保つことは完全に論理的です。投票{ user_id、object_id、object_type、vote_info...)

あなたはすでにこれを行っている可能性があります。申し訳ありませんが、その場合は投稿から解釈できませんでした。

于 2009-05-01T02:23:04.263 に答える