valores valor una soporta seleccionar segundo por optimizar obtener maximos maximo mas lentas cuantas consultas consulta como columna campo alto agilizar mysql sql sql-update

soporta - MySQL-ACTUALIZA mĂșltiples filas con diferentes valores en una consulta



seleccionar el valor mas alto mysql (4)

Estoy tratando de entender cómo ACTUALIZAR varias filas con diferentes valores y simplemente no lo entiendo. La solución está en todas partes, pero a mí me parece difícil de entender.

Por ejemplo, tres actualizaciones en 1 consulta:

UPDATE table_users SET cod_user = ''622057'' , date = ''12082014'' WHERE user_rol = ''student'' AND cod_office = ''123456''; UPDATE table_users SET cod_user = ''2913659'' , date = ''12082014'' WHERE user_rol = ''assistant'' AND cod_office = ''123456''; UPDATE table_users SET cod_user = ''6160230'' , date = ''12082014'' WHERE user_rol = ''admin'' AND cod_office = ''123456'';

read un ejemplo, pero realmente no entiendo cómo hacer la consulta. es decir:

UPDATE table_to_update SET cod_user= IF(cod_office = ''123456'',''622057'',''2913659'',''6160230'') ,date = IF(cod_office = ''123456'',''12082014'') WHERE ?? IN (??) ;

No estoy del todo claro cómo hacer la consulta si hay varias condiciones en WHERE y en la condición IF ... ¿alguna idea?


MySQL permite una forma más legible de combinar múltiples actualizaciones en una sola consulta. Esto parece ajustarse mejor al escenario que describes, es mucho más fácil de leer y evita esas condiciones múltiples difíciles de desentrañar.

INSERT INTO table_users (cod_user, date, user_rol, cod_office) VALUES (''622057'', ''12082014'', ''student'', ''123456''), (''2913659'', ''12082014'', ''assistant'',''123456''), (''6160230'', ''12082014'', ''admin'', ''123456'') ON DUPLICATE KEY UPDATE cod_user=VALUES(cod_user), date=VALUES(date)

Esto supone que la combinación user_rol, cod_office es una clave principal. Si solo uno de estos es el PK, agregue el otro campo a la lista de ACTUALIZACIÓN. Si ninguno de ellos es una clave primaria (que parece poco probable), este enfoque siempre creará nuevos registros, probablemente no lo que se desea.

Sin embargo, este enfoque hace que las declaraciones preparadas sean más fáciles de construir y más concisas.


Puede usar una instrucción CASE para manejar escenarios múltiples si / entonces:

UPDATE table_to_update SET cod_user= CASE WHEN user_rol = ''student'' THEN ''622057'' WHEN user_rol = ''assistant'' THEN ''2913659'' WHEN user_rol = ''admin'' THEN ''6160230'' END ,date = ''12082014'' WHERE user_rol IN (''student'',''assistant'',''admin'') AND cod_office = ''17389551'';


Puedes hacerlo de esta manera:

UPDATE table_users SET cod_user = (case when user_role = ''student'' then ''622057'' when user_role = ''assistant'' then ''2913659'' when user_role = ''admin'' then ''6160230'' end), date = ''12082014'' WHERE user_role in (''student'', ''assistant'', ''admin'') AND cod_office = ''17389551'';

No entiendo tu formato de fecha. Las fechas deben almacenarse en la base de datos usando tipos nativos de fecha y hora.


update table_name set cod_user = CASE WHEN user_rol = ''student'' THEN ''622057'' WHEN user_rol = ''assistant'' THEN ''2913659'' WHEN user_rol = ''admin'' THEN ''6160230''? END,date = ''12082014'' WHERE user_rol IN (''student'',''assistant'',''admin'') AND cod_office = ''17389551'';