2010-06-22 5 views
0

J'ai une table de professeurs, et chaque faculté a un certain nombre d'étudiants sous lui/elle. Il y a donc une colonne «actuelle», qui est le nombre d'étudiants actuellement sous eux.Comment conserver une colonne constamment mise à jour?

Cependant, je ne veux pas ++ et - chaque fois que je mets un étudiant à une autre faculté. Est-il un moyen de garder la colonne mise à jour avec une requête qui utilise count ()? Je trouve qu'il est plus facile et plus précis d'utiliser la requête 'select count () de l'étudiant où le conseiller = 2' par exemple celui utilisant ma colonne actuelle.

+0

Merci à tout le monde – yuudachi

Répondre

2

Pour ce faire, utilisez une vue:

CREATE VIEW studentCount AS 
SELECT 
    profID, 
    profName, 
    whatever, 
    (SELECT COUNT(*) 
    FROM studentTable 
    WHERE studentTable.profID=profTable.profID 
    ) AS studentCount 
FROM profTable; 

De toute évidence, cela doit être massé un peu pour adapter votre schéma, mais essentiellement, la configuration de votre point de vue d'avoir toutes les colonnes de la table avec la faculté info et ajoutez une colonne à la fin qui compte le nombre que vous voulez en elle. Les déclencheurs pourraient être une solution à votre problème?

1

http://dev.mysql.com/doc/refman/5.5/en/triggers.html

Vous pouvez créer un déclencheur qui met à jour automatiquement votre table de professeurs chaque fois qu'un professeur de commutation étudiant.

+0

C'est le ++/- que l'OP veut éviter ... –

+0

Il se peut qu'il ne se souvienne pas toujours de ++/- sur les mises à jour de table (que ce soit des changements manuels ou manuels)), et de s'inquiéter que la colonne 'current' est inexacte. Les déclencheurs pourraient résoudre cela. Il devrait considérer le rapport de lecture/écriture de la base de données et la taille de ces tables pour décider si la vue ou la solution de déclenchement est la meilleure. –

Questions connexes