2012-03-13 11 views
25

का MySQL अद्यतन फ़ील्ड मैं वर्तमान में दो अपडेट क्वेरी का उपयोग कर रहा हूं और सोच रहा हूं कि इसे एक में कटौती करने का कोई तरीका है या नहीं।सेट IF NULL या अन्य मान

field1 OFTYPE INT 
field2 OFTYPE DATETIME 
field3 OFTYPE DATETIME 

UPDATE `Table1` SET `field1` = `field1` + 1, `field2` = NOW() WHERE `id` = $id; 
UPDATE `Table1` SET `field3` = NOW() WHERE `id` = $id AND (`field3` < '2011-00-00 00:00:00' OR `field3` IS NULL); 

मैं एक प्रश्न है कि और अधिक तो जैसे अद्यतन करना होगा प्राप्त करने के लिए कोशिश कर रहा हूँ:

UPDATE `Table1` 
SET `field1` = `field1` + 1, 
    `field2` = NOW(), 
    `field3` = ISNULL(NOW(), `first_seen`); 
+0

एक अद्यतन डालने या हटाने का विवरण केवल एक तालिका/दृश्य अपडेट कर सकता है। हालांकि, कोशिश अच्छी थी! – Har

+0

@ हाहाहु ओपी केवल एक टेबल अपडेट करता है, इसलिए यह बिल्कुल ठीक है। –

+0

@HarHaHu यह केवल एक टेबल है जैसा मैंने इसे पढ़ा है;) –

उत्तर

59

मुझे लगता है कि यह आप एक IF कथन का उपयोग यह करने के लिए के लिए संभव है। अभिव्यक्ति, मूल्य अगर सच है, मूल्य अगर झूठी

अपने मामले में

तो, आप शायद आपके प्रश्नों लिख सकता है एक निम्नलिखित की तरह जाना में:

UPDATE Table1 
SET 
    field1 = field1 + 1, 
    field2 = NOW(), 
    field3 = IF(field3 < '2011-00-00 00:00:00' OR field3 IS NULL, NOW(), field3) 
WHERE id = $id; 
यदि बयान 3 मानकों जब आप इसे उपयोग कर रहे हैं लेता है

इस तरह, यदि अभिव्यक्ति सत्य है, तो field3NOW() होगा और अन्यथा, यह वही रहेगा जैसा यह था।

+0

दिनांक एक mysql त्रुटि का कारण बनता है, '2011-01-01 00:00:00' में बदलें – Madarco

0

field3field1 और field2 से एक अलग शर्त के साथ अद्यतन करने की है, तो मुझे लगता है कि आप लगता है सभी एक प्रश्न में नहीं कर सकते हैं। यदि आप प्रश्नों को एकसाथ या कुछ भी निष्पादित करना है तो आप TRANSACTION क्या कर सकते हैं।

10

अपने मामले में आप इस्तेमाल कर सकते हैं CASE *:

UPDATE Table1 
SET field1 = field1 + 1, 
    field2 = NOW(), 
    field3 = 
     CASE 
     WHEN field3 < '2011-00-00 00:00:00' THEN /* Evaluates to false if NULL */ 
      NOW() 
     WHEN field3 IS NULL THEN 
      NOW() 
     ELSE /* Don't change */ 
      field3 
     END 
WHERE id = 1 

* पुन वैकल्पिक

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