2009-10-19 16 views
0

Fondamentalement, ce que j'ai est un système où les utilisateurs sont récompensés pour chaque 10 commentaires. Donc, dans la base de données, une table capture les commentaires, et l'autre une récompense pour chaque dixième commentaire ajouté. Par exemple, si un utilisateur a ajouté 40 commentaires, il aura 4 récompenses/4 lignes dans le tableau 2.Ajouter une ligne dans une table pour chaque énième entrée d'une autre table

Cela me semble si simple, mais je n'arrive pas à le comprendre. J'ai peut-être pensé qu'un opérateur de modulus pourrait aider, mais j'ai besoin d'ajouter une nouvelle ligne dans le tableau 2 à chaque fois, de ne pas écraser ou de réécrire les lignes à chaque fois.

Aide appréciée; J'ai le sentiment que c'est juste devant moi!

Répondre

0

Je suppose que vous avez un modèle pour la première table, ou au moins une fonction qui fait l'insertion. Vous pouvez ajouter plus de fonctionnalités à cette fonction, et faire quelque chose comme:

0

Vous devrez compter le nombre de commentaires ajoutés par l'utilisateur chaque fois qu'il/elle publie un commentaire. Si le commentaire% 10 == 0, alors vous devrez ajouter une nouvelle ligne dans votre table 2 (pour la récompense).

0
  • insert
  • select count() les commentaires pour un utilisateur
  • if number_of_comments % 10 == 0 -> ne pas insérer dans les récompenses table

qui est la façon dont je devrais le faire.

2

Les récompenses sont-elles uniques, de telle sorte que vous ayez à pour les suivre dans un tableau distinct? Ou pouvez-vous simplement compter le nombre de commentaires qu'un utilisateur a fait lorsque vous avez besoin du numéro?

Dans le cas où vous avez besoin de suivre les récompenses dans une table séparée, pensez à un déclencheur:

create trigger insert_trigger after insert on comments_table 
for each row begin 
    if (select count(*) from comments_table where user_id = new.user_id) mod 10 = 0 then 
     insert into rewards_table (user_id) values (new.user_id); 
    end if; 
end; 

Si vous autorisez les suppressions de la table des commentaires, vous auriez également besoin d'un on delete de déclencheur sur la Table des commentaires qui teste si le nombre de récompenses est toujours correct pour un utilisateur et, dans le cas contraire, vous devez décider lequel supprimer.

0

Mon idée est que vous devez ajouter un champ supplémentaire comme drapeau. Vous pouvez le nommer récompensé qui est enum. 'Y' pour Oui ou 'N' pour Non. Chaque fois que vous insérez un commentaire, vous pouvez enregistrer un 'N' par défaut et vérifier la base de données.

SELECT count(my_comment) FROM comments WHERE rewarded = 'N'; 

Utilisez modulo pour vérifier s'il atteint 10 commentaires. Si oui, insérez une ligne dans l'autre table et mettez à jour le champ récompensé avec 'N' à 'Y'

Questions connexes