如何在不將數組儲存在 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 不直接支援這一點,但請考慮以下替代方法:

資料庫架構

建立三個表:

  • 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!