You seek to create a table in MySQL to store an array of user IDs who have voted on comments. By doing so, you aim to prevent multiple votes from the same user on the same comment.
Consider using a separate table, comments_votes, to establish a many-to-many relationship between the comments and users tables. The following schema provides a foundation:
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) );
The composite primary key (comment_id, user_id) in comments_votes prevents users from voting multiple times on the same comments.
Insert some data to demonstrate:
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');
Add votes for user 1:
INSERT INTO comments_votes VALUES (1, 1, 1); INSERT INTO comments_votes VALUES (2, 1, 1);
Attempting to vote again on a previously voted comment will result in an error due to the unique primary key constraint:
INSERT INTO comments_votes VALUES (1, 1, 1); ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'
If using the InnoDB storage engine, consider adding foreign key constraints to ensure referential integrity:
... 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;
These foreign keys ensure that comments_votes references only valid comment IDs and user IDs.
This solution provides several benefits over storing arrays within a single database field:
The above is the detailed content of How to Prevent Duplicate Votes in MySQL When Storing User Voting Data?. For more information, please follow other related articles on the PHP Chinese website!