Maison > base de données > tutoriel mysql > le corps du texte

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

Susan Sarandon
Libérer: 2024-10-31 02:35:01
original
633 Les gens l'ont consulté

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)
);
Copier après la connexion

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);
Copier après la connexion

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>;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!