2009-12-11 16 views
7

Ni siquiera estoy seguro de si esto es posible, pero estoy tratando de hacer diferentes ACTUALIZACIONES si se cumple una determinada condición.ACTUALIZACIÓN de MySQL usando la condición IF

de usuario [ID, fecha_inicial (NOT NULL), fecha_final (NULL), la razón (NULL), .....]

user_roles [id, ROLE_ID, user_id, fecha_inicial (NOT NULL), fecha_final (NULL)]

lo que ahora tenemos es esto, pero esto sólo funciona si existe una función para el usuario y es fecha_final es NULL:

UPDATE user p 
JOIN user_roles ur ON p.id = ur.user_id 
SET ur.end_date = NOW() 
    , p.end_date = NOW() 
    , p.reason = "Retired" 
WHERE p.id = 5 
AND ur.end_date IS NULL 

yo estaba pensando en hacer algo como esto:

IF EXISTS (SELECT id FROM user_roles 
WHERE user_id = 5 AND end_date IS NULL) 
THEN 
    UPDATE user p 
    JOIN user_roles ur ON p.id = ur.user_id 
    SET ur.end_date = NOW() 
     , p.end_date = NOW() 
     , p.reason = "Retired" 
    WHERE p.id = 5 AND ur.end_date IS NULL 
ELSE 
    UPDATE user 
    SET end_date = NOW() 
     , reason = "Retired" 
    WHERE id = 5 
END IF 
+0

@APC, que estaba haciendo lo mismo =) –

Respuesta

14

Dado que la única diferencia es si va a configurar ur.end_Date ya sea a la fecha actual o ajustarlo a su fecha de existente se puede no sólo tiene que utilizar el siguiente:

UPDATE user p 
JOIN user_roles ur 
ON p.id = ur.user_id 
SET 
ur.end_date = IF (ur.end_date IS NULL, NOW(), ur.end_date), 
p.end_date = NOW(), 
p.reason = "Retired" 
WHERE p.id = 5 
+0

Eso tiene mucho más sentido ... funciona perfectamente. Gracias Martin !! – moleculezz

Cuestiones relacionadas