2009-12-11 9 views
7

का उपयोग कर MySQL अद्यतन अद्यतन मुझे यह भी सुनिश्चित नहीं है कि यह संभव है, लेकिन यदि कोई निश्चित शर्त पूरी हो जाती है तो मैं अलग-अलग अद्यतन करने की कोशिश कर रहा हूं।आईएफ स्थिति

उपयोगकर्ता [आईडी, प्रारंभ_तिथि (नहीं NULL), समाप्ति_तिथि (शून्य), कारण (शून्य), .....]

user_roles [आईडी, ROLE_ID, user_id, प्रारंभ_तिथि (नहीं 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 

मैं इस तरह कुछ करने का सोच रहा था:

शून्य)]

है क्या मैं अभी इस लेकिन यह केवल काम करता है अगर एक भूमिका उपयोगकर्ता के लिए मौजूद है और यह end_date है शून्य है

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, मैं एक ही बात कर रहा था =) –

उत्तर

14

के बाद से फर्क सिर्फ इतना है कि क्या आप या तो वर्तमान दिनांक को ur.end_Date स्थापित करने या इसे करने के लिए स्थापित तुम सिर्फ निम्न का उपयोग नहीं कर सकता है तारीख मौजूदा रहा है कर रहे हैं:

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

यह वास्तव में और अधिक समझ में आता है ... यह पूरी तरह से काम करता है। धन्यवाद मार्टिन !! – moleculezz

संबंधित मुद्दे