Question

En termes simples: J'ai une table avec 2 colonnes: l'une est le nom d'utilisateur et autre surnom. J'ai une autre table où j'ai 2 colonnes: un nom d'utilisateur est autre et est countNicknames

.

Je veux countNicknames contenir le nombre de surnoms chaque utilisateur a (et chaque fois que j'insérer un nouveau surnom au tableau 1, la valeur sous table2.countNicknames mettra automatiquement à jour.

Pouvez-vous s'il vous plaît écrivez comment construire la deuxième table pour faire référence à la première?

Était-ce utile?

La solution

Pourquoi ne pas compter juste au moment où vous avez besoin de la valeur?

Autres conseils

  

Je veux countNicknames contenir le nombre de surnoms chaque utilisateur a (et chaque fois que j'insérer un nouveau surnom au tableau 1, la valeur sous table2.countNicknames mettra automatiquement à jour.

est effectivement ce que vue va faire.

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*) 'countNicknames'
      FROM TABLE t
  GROUP BY t.username

Une vue ressemble comme une table, vous CAH joindre à elle si nécessaire. Et la seule tête est qu'il est effectivement juste une requête SELECT en cours d'exécution -. Les valeurs sont calculées sur la demande, plutôt que d'avoir à configurer les déclencheurs

Pour plus informations sur les vues, consultez la documentation .

Eh bien, @ suggestion de Lasse est meilleur, mais ... il y a deux autres Une autre option ...

  1. Est-ce que MySql ont des déclencheurs? Si oui, alors vous ajouteriez un Insert, Update, Delete déclencheur sur la première table que les mises à jour (ou insertions ou suppressions si nécessaire), le second de CountNickNames de la table d'attributs à chaque fois qu'un enregistrement est inséré, mis à jour ou supprimé de la première table .. .

    Créer un déclencheur NickNameCountTrig sur NickNameCountTable   Insert, Update, Delete   Comme      Mise à jour Set NCT         CountNickNames =              (Sélectionnez Count () De FirstTable               Où Nom = nct.Name)      De NickNameCountTable NCT      Où Nom Dans (Sélectionner Nom Distinct inséré                     syndicat                     Sélectionnez Nom Distinct De supprimé)      - -----------------------------------------------      Insérer NickNameCountTable (Nom, CountNickNames)      Sélectionnez le nom, compte () de FirstTable pieds      Où Non Exists           (Select * from NickNameCountTable            Où Nom = ft.Name)      - ------ Cette option est facultative -----------------------      supprimer NickNameCountTable      Où CountNickNames = 0

  2. Est-ce que MySql ont des vues indexées (ou un equivilent)? apparemment pas - l'esprit si jamais cette option ....

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top