Pregunta

En pocas palabras: Tengo una tabla con 2 columnas: uno es nombre de usuario y la otra es apodo. Tengo otra mesa donde tengo 2 columnas: uno es nombre de usuario y otra es countNicknames

.

Quiero countNicknames para contener el número de apodos cada usuario tiene (y cada vez que se inserta un nuevo apodo a la tabla 1, el valor bajo table2.countNicknames se actualizará automáticamente.

Puede usted por favor, anote la forma de construir la segunda tabla para hacer referencia a la primera?

¿Fue útil?

Solución

¿Por qué no contar cuando se necesita el valor?

Otros consejos

  

Quiero countNicknames para contener el número de apodos cada usuario tiene (y cada vez que se inserta un nuevo apodo a la tabla 1, el valor bajo table2.countNicknames se actualizará automáticamente.

Esto es efectivamente lo que es un punto de vista va a hacer.

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

Una vista ve como una mesa, por lo que CAH unirse a ella si es necesario. Y la única cabeza es que efectivamente es sólo una consulta SELECT que se ejecuta -. Los valores se calculan sobre la demanda, en lugar de tener que configurar disparadores

Para obtener más información de vistas, consulte la documentación .

Bueno, @ sugerencia de Lasse es mejor, pero ... hay otros dos otras opciones ...

  1. ¿Tiene MySQL no tienen factores desencadenantes? Si lo hace, entonces deberá añadir una inserción, actualizar, eliminar gatillo de la primera tabla que se actualiza (o añadir o suprimir si es necesario) CountNickNames de la segunda tabla de atributos cada vez que se inserta un registro, actualizado o eliminado de la primera tabla .. .

    Crear activador NickNameCountTrig En NickNameCountTable   Para Insertar, actualizar, eliminar   Como      Actualizar el conjunto de NCT         CountNickNames =              (Select count () De FirstTable               Donde Name = nct.Name)      De NCT NickNameCountTable      En donde Nombre (Seleccionar nombre distinto del insertada                     Unión                     Seleccionar Nombre distinto de borrado)      - -----------------------------------------------      Insertar NickNameCountTable (Nombre, CountNickNames)      Elija un nombre, count () de FirstTable pies      Cuando no existe           (Seleccionar * De NickNameCountTable            Donde Name = ft.Name)      - ------ Esto es opcional -----------------------      eliminar NickNameCountTable      Donde CountNickNames = 0

  2. ¿Tiene MySql han indexado vistas (o algún equivilent)? aparentemente no - por lo que no importa esta opción ....

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top