2009-12-11 38 views
7

Tôi thậm chí không chắc chắn nếu điều này là có thể nhưng tôi đang cố gắng để làm khác nhau CẬP NHẬT nếu một điều kiện nhất định được đáp ứng.CẬP NHẬT MySQL bằng cách sử dụng điều kiện IF

người dùng [id, start_date (NOT NULL), end_date (NULL), lý do (NULL), .....]

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

gì ngay bây giờ tôi đã là thế này nhưng điều này chỉ hoạt động nếu một vai trò tồn tại cho người sử dụng và nó end_date là 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 

tôi đã nghĩ đến việc làm một cái gì đó như thế này:

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, tôi đang làm điều tương tự =) –

Trả lời

14

Kể từ sự khác biệt duy nhất là cho dù bạn đang thiết ur.end_Date cho một trong hai ngày hiện tại hoặc thiết lập nó để nó ngày hiện có thể giúp bạn không chỉ cần sử dụng như sau:

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

Điều đó có ý nghĩa hơn rất nhiều ... nó hoạt động hoàn hảo. Cảm ơn Martin !! – moleculezz

Các vấn đề liên quan