2009-12-11 15 views
7

Non sono nemmeno sicuro se è possibile, ma sto cercando di fare un AGGIORNAMENTO diverso se viene soddisfatta una determinata condizione.AGGIORNAMENTO MySQL utilizzando la condizione IF

utente [id, start_date (NOT NULL), data_finale (NULL), la ragione (NULL), .....]

user_roles [id, ROLE_ID, user_id, start_date (NOT NULL), data_finale (NULL)]

Quello che ho in questo momento è questo, ma questo funziona solo se esiste un ruolo per l'utente ed è data_finale è 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 

stavo pensando di fare qualcosa di simile:

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, stavo facendo stessa cosa =) –

risposta

14

Poiché l'unica differenza è se si sta impostando ur.end_Date sia alla data corrente o impostarlo su di essa la data esistente potrebbe non solo utilizzare il seguente:

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

Ciò ha molto più senso in effetti ... funziona perfettamente. Grazie Martin !! – moleculezz