Pergunta

Simplificando: eu tenho uma tabela com 2 colunas: uma é o nome de usuário e outras é apelido. Eu tenho outra tabela em que tenho 2 colunas: uma é o nome de usuário e outras são o CountNickNames.

Quero que o CountNickNames contenha o número de apelidos que cada usuário possui (e sempre que eu insiro um novo apelido na Tabela1, o valor em Table2.CountNickNames será atualizado automaticamente.

Você pode escrever como construir a segunda tabela para fazer referência à primeira?

Foi útil?

Solução

Por que não contar quando você precisa do valor?

Outras dicas

Quero que o CountNickNames contenha o número de apelidos que cada usuário possui (e sempre que eu insiro um novo apelido na Tabela1, o valor em Table2.CountNickNames será atualizado automaticamente.

Isso é efetivamente o que uma visão fará.

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

Uma vista parece Como uma mesa, então você se junta a ela, se necessário. E a única sobrecarga é que ele efetivamente é apenas uma consulta selecionada sendo executada - os valores são calculados sob demanda, em vez de precisar configurar gatilhos.

Para mais Informações sobre visualizações, consulte a documentação.

Bem, a sugestão de @lasse é melhor, mas ... existe Dois outros Outras opções ...

  1. O MySQL tem gatilhos? Se isso acontecer, você adicionaria uma inserção, atualizará, excluirá o gatilho na primeira tabela que atualiza (ou insere ou exclui conforme necessário) o atributo CountNickNames da segunda tabela toda vez que um registro é inserido, atualizado ou excluído da primeira tabela. .

    Crie o gatilho NicknamECountTrig no NicknamECountTable para inserção, atualizar, excluir como atualização NCT Set CountNickNames = (Selecione contagem () Da primeira vez onde nome = nct.name) do NCT NECHAMECOUNTTABLE em que o nome em (selecione Nome distinto da união inserida Selecione o nome distinto de exclusão)---------------------- -----------------------) do FirstTable ft onde não existe (selecione * de NicknamECountTable onde nome = ft.name) ------ Isso é opcional ------------------------ --- Exclua NicknamECountTable Where CountNickNames = 0

  2. O MySQL tem visualizações indexadas (ou algum equívoco)? Aparentemente, não - então não importa esta opção ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top