0

SEの投票システムに似た機能を持つWebサイトを構築しています。ユーザーが投稿ごとに複数回投票することを制限しようとしています。

現在、ユーザーがすでに投票した s (投稿に対応) のuserリストを保持する mysql データベースにフィールドを作成することを考えていました。idユーザーが投票するたびに、配列は現在の投稿の に対してチェックされますid。見つかった場合はエラー メッセージが表示され、そうでない場合は投票がid行われ、ユーザーの「既に投票済み」リストの一部になります。

これはこれを行う奇妙な方法のようです。効率の良い方法ですか?どの方法がより良い/最善でしょうか?

4

1 に答える 1

3

user_id と post_id を持つ user_post という別のテーブルを作成します。実際、これらの列を複数列の主キーにすることができます。

ユーザーが投稿に投票すると、次のクエリを使用できます。

REPLACE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote)

置換は本質的に「一意のキーの競合がない限り挿入し、競合する場合は行を更新する」と言っています。または、次を使用できます。

INSERT IGNORE INTO user_post (user_id, post_id, vote) VALUES (:userId, :postId, :vote)

これは本質的に「一意のキーの競合がない限り挿入し、競合する場合は無視する」と言っています(最初の投票のみを保持したい場合)。

于 2011-11-18T04:58:05.003 に答える