首頁  >  文章  >  資料庫  >  如何在不將數組儲存在 MySQL 中的情況下防止評論評級系統中的多次投票?

如何在不將數組儲存在 MySQL 中的情況下防止評論評級系統中的多次投票?

Susan Sarandon
Susan Sarandon原創
2024-10-31 02:35:01634瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn