您寻求在 MySQL 中创建一个表来存储用户 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) );
comments_votes 中的复合主键(comment_id、user_id)可防止用户对同一评论进行多次投票。
插入一些数据来演示:
INSERT INTO comments VALUES (1, 'first comment'); INSERT INTO comments VALUES (2, 'second comment'); INSERT INTO comments VALUES (3, 'third comment'); INSERT INTO users VALUES (1, 'user_a'); INSERT INTO users VALUES (2, 'user_b'); INSERT INTO users VALUES (3, 'user_c');
为用户 1 添加投票:
INSERT INTO comments_votes VALUES (1, 1, 1); INSERT INTO comments_votes VALUES (2, 1, 1);
尝试对之前投票的评论再次投票将因唯一性而导致错误主键约束:
INSERT INTO comments_votes VALUES (1, 1, 1); ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'
如果使用 InnoDB 存储引擎,请考虑添加外键约束以确保引用完整性:
... CREATE TABLE comments ( ... ) ENGINE=INNODB; CREATE TABLE users ( ... ) ENGINE=INNODB; CREATE TABLE comments_votes ( ... FOREIGN KEY (comment_id) REFERENCES comments (comment_id), FOREIGN KEY (user_id) REFERENCES users (user_id) ) ENGINE=INNODB;
这些外键确保 comments_votes 仅引用有效的评论 ID 和用户 ID。
与在单个数据库字段中存储数组相比,此解决方案具有多个优点:
以上是MySQL存储用户投票数据时如何防止重复投票?的详细内容。更多信息请关注PHP中文网其他相关文章!