Storing Arrays in MySQL for Voting System
To prevent multiple votes in a comment rating system, arrays of user IDs can be stored in MySQL. Here's how to achieve this using an intersection table:
Database Schema
<code class="sql">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) );</code>
Data Insertion
<code class="sql">INSERT INTO comments VALUES (1, 'first comment'); INSERT INTO users VALUES (1, 'user_a'); INSERT INTO comments_votes VALUES (1, 1, 1);</code>
The comments_votes table stores the comment ID, user ID, and vote type. The composite primary key prevents duplicate votes on the same comment.
Foreign Key Constraints
To ensure referential integrity and prevent orphan rows:
<code class="sql">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;</code>
This ensures that a comments_votes row will always refer to an existing comment and user.
Benefits of Intersection Table
Using an intersection table avoids the following complications:
The above is the detailed content of How to Prevent Multiple Votes in a Comment Rating System Using MySQL?. For more information, please follow other related articles on the PHP Chinese website!