首页  >  文章  >  数据库  >  如何在不将数组存储在 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