2010-07-21 9 views
2

Cela peut être une question stupide mais est-il possible de stocker une requête de comptage dans un champ dans une table de sorte que lorsque le résultat du compte change, le résultat se met à jour?Mettre à jour une table mySQL quand quelque chose change

Thread(ThreadID,NumMessages) 
Message(MessageID,ThreadID,MessageText,PreviousMessage) 

Je veux mettre à jour le champ Thread.NumMessages tout temps un message avec le ThreadID est ajouté ou supprimé correspondant. Je sais que je peux le faire par incrémenter/décrémenter le champ Thread.NumMessages de l'aide d'un nombre requête

SELECT COUNT (*), à partir SCHEMA.Message OÙ ThreadID = « SOMETHREADID »

Mais est-il de toute façon de configurer le champ NumMessages afin qu'il soit mis à jour sans qu'il soit fait explicitement à chaque ajout et supprimer?

Merci Graeme

Répondre

1

Déclencheurs!

Vous voulez un déclencheur. Cela devrait vous aider dans votre recherche (sachant ce que vous cherchez est la moitié de la bataille). Fondamentalement, un déclencheur se déclenche à chaque fois qu'un événement désigné (tel que l'insertion) sur une table est déclenché et exécute une procédure stockée. Votre procédure stockée vérifie alors que c'est quelque chose qui l'intéresse (vous pouvez ajouter toutes sortes de logique ici), puis fait quelque chose (incrémenter cette valeur?) Avant que MySQL n'exécute la requête originale qui l'a déclenchée dans le premier endroit.

http://www.roseindia.net/mysql/mysql5/triggers.shtml

+0

Utilisez une vue avant de penser aux déclencheurs. –

+0

Merci beaucoup :) J'avais déjà entendu le terme "trigger" mais je ne les ai jamais utilisés, ils sont exactement ce dont j'ai besoin pour le moment :) –

4

oui, vous pouvez utiliser une vue comme la mise en œuvre de votre table de discussion.

http://dev.mysql.com/doc/refman/5.1/en/create-view.html

Create view thread_view 
    select 
     count(*) as NumMessages, 
     threadID 
     from message 
     group by threadID 
+0

+1: Vous me devança –

+0

qui me ok vous avez devança environ 3100 autres fois :) – Zak

+0

Merci les gars, mais à cet effet exact déclenche me convient mieux, mais je vais passer un peu de temps regarder dans les vues et les déclencheurs dès que j'ai le temps :) –

Questions connexes