Domanda

In poche parole: Ho una tabella con 2 colonne: uno è il nome utente e l'altro è il soprannome. Ho un altro tavolo dove ho 2 colonne: uno è il nome utente e altro è countNicknames

.

voglio countNicknames per contenere il numero di nomi di ciascun utente (e ogni volta che si inserisce una nuova nick alla tabella 1, il valore sotto table2.countNicknames aggiorna automaticamente.

Si può annotare come costruire la seconda tabella per fare riferimento al primo?

È stato utile?

Soluzione

Perché non basta contare quando è necessario il valore?

Altri suggerimenti

  

voglio countNicknames per contenere il numero di nomi di ciascun utente (e ogni volta che si inserisce una nuova nick alla tabella 1, il valore sotto table2.countNicknames aggiorna automaticamente.

Questa è effettivamente che vista farà.

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

Una vista guarda come un tavolo, in modo da CAH aderire ad esso, se necessario. E l'unico in testa è che si tratta effettivamente solo una query di selezione in esecuzione -. I valori sono calcolati su richiesta, piuttosto che dover impostazione trigger

Per ulteriori informazioni sulle viste, consultare la documentazione .

Bene, @ suggerimento di Lasse è meglio, ma ... c'è altri due altre opzioni ...

  1. Il MySql ha trigger? Se è così, allora si dovrebbe aggiungere un Insert, Update, Delete grilletto sul primo tavolo che gli aggiornamenti (o inserti o cancella, se necessario) CountNickNames della seconda tabella degli attributi ogni volta che si inserisce un disco, aggiornati o cancellati dalla prima tabella .. .

    Crea trigger NickNameCountTrig On NickNameCountTable   Per Insert, Update, Delete   Come      Aggiornare Imposta nct         CountNickNames =              (Selezionare il conteggio () Da FirstTable               Dove Name = nct.Name)      Da nct NickNameCountTable      Dove denominazione di (Seleziona Nome Distinto da inserito                     Unione                     Seleziona Nome distinto da cancellato)      - -----------------------------------------------      Inserire NickNameCountTable (Nome, CountNickNames)      Selezionare il nome, conta () da FirstTable ft      Dove non esiste           (Select * From NickNameCountTable            Dove Name = ft.Name)      - ------ Questo è opzionale -----------------------      Eliminare NickNameCountTable      Dove CountNickNames = 0

  2. Il MySql hanno indicizzato viste (o qualche equivilent)? a quanto pare non - in modo da non importa questa opzione ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top