MySQL に配列を保存せずにコメント評価システムでの複数投票を防ぐにはどうすればよいですか?

Susan Sarandon
リリース: 2024-10-31 02:35:01
オリジナル
633 人が閲覧しました

How to Prevent Multiple Votes in a Comment Rating System Without Storing Arrays in MySQL?

MySQL への配列の保存: 代替アプローチ

コメント評価システムでの複数投票を防ぐために、ユーザーの配列を保存したいとします。 MySQL フィールドの ID。これは MySQL では直接サポートされていませんが、次の代替アプローチを検討してください:

データベース スキーマ

3 つのテーブルを作成します:

  • comments: コメント ID と本文が含まれます。
  • users: ユーザー ID とユーザー名を保存します。
  • comments_votes: コメントをユーザーにリンクします
CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
);

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
);

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id)
);
ログイン後にコピー

データ例

INSERT INTO comments VALUES (1, 'first comment');
INSERT INTO comments VALUES (2, 'second comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');

INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);
ログイン後にコピー

ユーザー資格の確認

ユーザーが特定のコメントに既に投票しているかどうかを確認するには、次の単純なクエリを使用します。

SELECT COUNT(*) FROM comments_votes WHERE comment_id = <comment id> AND user_id = <user id>;
ログイン後にコピー

このアプローチでは、comments_votes テーブルの主キー制約が一意性を確保しているため、複数の投票が防止されます。

複数投票の防止

ユーザーがすでに投票している場合は、クエリ結果に基づいてシステム ロジックの投票アイコンを無効にします。

このアプローチの利点

  • 外部キー制約によりデータの整合性を確保します。
  • 配列を単一フィールドにシリアル化する必要がなくなります。
  • データベースが簡素化されます。操作を軽減し、データ破損のリスクを軽減します。

以上がMySQL に配列を保存せずにコメント評価システムでの複数投票を防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!