Frage

Einfach gesagt: Ich habe eine Tabelle mit zwei Spalten: Die eine ist Benutzername und andere Spitznamen. Ich habe eine andere Tabelle, wo ich 2 Spalten: Die eine ist Benutzername und andere countNicknames

.

Ich möchte countNicknames die Anzahl der Spitznamen zu enthalten hat jeder Benutzer (und wann immer füge ich einen neuen Spitznamen in der Tabelle 1, der Wert unter table2.countNicknames wird automatisch aktualisiert.

Können Sie bitte aufschreiben, wie die zweite Tabelle zu konstruieren, um den ersten zu verweisen?

War es hilfreich?

Lösung

Warum nicht nur zählen, wenn Sie den Wert brauchen?

Andere Tipps

  

Ich möchte countNicknames die Anzahl der Spitznamen zu enthalten hat jeder Benutzer (und wann immer füge ich einen neuen Spitznamen in der Tabelle 1, der Wert unter table2.countNicknames wird automatisch aktualisiert.

Dies ist effektiv, was eine Ansicht tun wird.

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

Ein Blick Aussehen wie ein Tisch, so dass Sie es kommen CAH, wenn nötig. Und der einzige Aufwand ist, dass es effektiv nur eine SELECT-Abfrage ausgeführt werden. - Die Werte werden berechnet auf Nachfrage, anstatt auf Setup-Trigger mit

Für weitere Informationen zu Ansichten finden Sie in der Dokumentation .

Nun, @ Lass Vorschlag besser ist, aber ... es ist zwei weitere Optionen ...

  1. Does MySql haben Trigger? Ist dies der Fall, dann würden Sie ein Insert, Update, Delete-Trigger auf der ersten Tabelle hinzufügen, dass Aktualisierungen (oder Einlagen oder Löschungen je nach Bedarf) die CountNickNames der zweiten Tabelle jedes Mal ein Rekord-Attribut wird eingefügt, aktualisiert oder aus der ersten Tabelle gelöscht .. .

    Erstellen Sie Trigger-NickNameCountTrig Auf NickNameCountTable   Für Insert, Update, Delete   Wie      Update NCT Set         CountNickNames =              (Select Count () Von FirstTable               Wo Name = nct.Name)      Von NickNameCountTable NCT      Wo Name In (Select Distinct Namen von eingefügt                     Union                     Wählen Sie Distinct Name aus gelöscht)      - -----------------------------------------------      Insert NickNameCountTable (Name, CountNickNames)      Wählen Sie Name, count () von FirstTable ft      Wo nicht Exists           (Select * From NickNameCountTable            Wo Name = ft.Name)      - ------ Dies ist optional -----------------------      Löschen NickNameCountTable      Wo CountNickNames = 0

  2. Does MySql haben indizierte Sichten (oder einige equivilent)? offenbar nicht - so nie diese Option dagegen ....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top