Maison  >  Article  >  base de données  >  Comment empêcher plusieurs votes dans un système de notation de commentaires sans stocker de tableaux dans MySQL ?

Comment empêcher plusieurs votes dans un système de notation de commentaires sans stocker de tableaux dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 02:35:01634parcourir

How to Prevent Multiple Votes in a Comment Rating System Without Storing Arrays in MySQL?

Stockage de tableaux dans MySQL : une approche alternative

Pour éviter les votes multiples dans un système d'évaluation des commentaires, vous souhaitez stocker un tableau d'utilisateurs ID dans un champ MySQL. Bien que cela ne soit pas directement pris en charge par MySQL, envisagez l'approche alternative suivante :

Schéma de base de données

Créez trois tables :

  • comments : Contient les ID et les corps des commentaires.
  • users : Stocke les ID et les noms d'utilisateur.
  • comments_votes : Liens vers les utilisateurs qui ont voté pour eux, y compris le type de vote.
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)
);

Exemples de données

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);

Vérification de l'éligibilité des utilisateurs

Pour déterminer si un utilisateur a déjà voté sur un commentaire particulier, utilisez une requête simple :

SELECT COUNT(*) FROM comments_votes WHERE comment_id = <comment id> AND user_id = <user id>;

Cette approche empêche plusieurs votes car la contrainte de clé primaire sur la table comments_votes garantit l'unicité.

Empêcher les votes multiples

Si l'utilisateur a déjà voté, désactivez les icônes de vote dans la logique du système en fonction du résultat de la requête.

Avantages de cette approche

  • Garantit l'intégrité des données grâce à des contraintes de clé étrangère.
  • Évite d'avoir à sérialiser les tableaux dans un seul champ.
  • Simplifie la base de données opérations et réduit le risque de corruption des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn