2010-04-01 7 views
4

J'ai déjà créé une table pour les commentaires mais je veux ajouter la fonctionnalité du pouce Up and Down pour des commentaires comme Digg et Youtube, j'utilise php & mysql et je me demande quel est le meilleur schéma de table pour mettre en œuvre ce commentaires j'aime sera sur le dessus.MySQL Structure de la table du pouce UP & DOWN pour le système de commentaires?

Voici ma table en cours commentaires: commentaires (id, utilisateur, article, commentaire, timbre)

Note: Seul registred sera en mesure de voter il devrait donc limiter 1 vote à chaque utilisateur dans un commentaire

Merci

Répondre

5

Conserver une table votes. Par exemple. votes (comment_id, user_id, valeur, timbre) - la valeur est -1 ou +1.

Cela permet la reddition de comptes, et vous pouvez faire un index UNIQUE sur (comment_id, user_id) pour éviter le vote en double. Vous pouvez également supprimer un utilisateur et tous ses votes facilement, s'il/elle spam.

Pour trier les commentaires par note, il est possible de faire une liaison entre le commentaire et voter tables et utiliser SUM/GROUPE pour obtenir le score total. Cependant, cela peut être lent. Pour plus de rapidité, vous pouvez également conserver un champ de score dans le tableau des commentaires. Chaque fois qu'une nouvelle ligne est ajoutée à la table des votes, vous ajoutez/soustrayez 1 au score du commentaire. Comme vous stockez chaque vote dans une table, il est facile de recalculer le score à la demande. Stack Overflow fait quelque chose de similaire avec la réputation - le score de réputation totale pour un utilisateur est mis en cache et recalculé de temps en temps.

0

vous pouvez ajouter un champ de score et incrément ou décrément à chaque action du pouce:

UPDATE comments SET score=score+1 Where id=123 

Ensuite, lorsque vous sélectionnez, l'ordre par le score DESC.

+0

Eh bien, vous exécuteriez ce sql chaque fois qu'ils votent. – webbiedave

+0

Je ne veux pas que les gens puissent voter des milliers de fois: D – Ryan

0

Étant donné qu'un utilisateur devrait être enregistré au pouce vers le haut/vers le bas, je stocke l'ID utilisateur et l'ID poste pour valider les montées/descentes.

2 tables seront appropriées pour cette tâche. Faites-moi savoir si vous avez besoin d'un design.

Questions connexes