2009-06-18 5 views
11

पर सेट करना क्या पंक्तियों के क्षेत्र को 0 से चुनने का एक प्रभावी तरीका है, लेकिन आईडी पर आधारित इन पंक्तियों में से एक को सेट करें।MySQL: एक पंक्ति को 0 पर सेट करने वाली सभी पंक्तियों को अपडेट करना, लेकिन एक पंक्ति के फ़ील्ड को 1

असल में, मेरे पास डेटाबेस में कई ऑब्जेक्ट्स हैं, और मैं टॉगल करना चाहता हूं कि कौन सा "inuse" है, इसलिए क्वेरी पंक्तियों में से एक (id द्वारा) को inuse = 1 और दूसरों को inuse = 0।

धन्यवाद :)

उत्तर

22
UPDATE `table` 
SET `inuse` = (`id` = 23) 
+1

यह भी काफी सुरुचिपूर्ण है :) –

+0

क्या आपको लगता है कि यह आर्टम की तुलना में तेज़/अधिक कुशल है? – Joel

+0

मुझे लगता है कि यह बिल्कुल वही है, अगर बिल्कुल वही नहीं है। –

11

ज़रूर

UPDATE table SET inuse=IF(id=ABCD, 1, 0) 

inuse क्षेत्र के लिए 1 सेट करते हैं तो आईडी एबीसीडी है और 0 अन्यथा होगा।

0
UPDATE myTable 
SET Field = 0 
WHERE FieldID <> [WhateverID] 

UPDATE myTable 
SET Field = 1 
WHERE FieldId = [WhateverID] 
0

update tbl set inuse = if(test, 1, 0); 

या कम

update tbl set inuse = test; 

उदाहरण

update tbl set inuse = name = 'foo'; 
1
UPDATE table 
SET  inuse = (id = @id) 
WHERE id = @id 
     OR inuse 
के लिए प्रयास करें

यह केवल प्रासंगिक पंक्तियों को अपडेट करेगा।

0

यदि आप ध्वज सेट करने के बाद हैं, तो कोड का कोई अन्य भाग एक ही ऑब्जेक्ट का उपयोग उसी समय नहीं करता है, यह बेहतर है कि कॉलिंग कोड inuse = 1 सेट करता है और इसे पूरा करते समय रीसेट करता है। अन्यथा आप ऑब्जेक्ट (पंक्ति) को इनयूज के रूप में चिह्नित करने के लिए एक थ्रेड समाप्त कर देंगे, और फिर यदि किसी अन्य थ्रेड को किसी अन्य ऑब्जेक्ट की आवश्यकता है, तो यह अभी भी उपयोग में होने पर पहले को रीसेट कर देगा।

अगर ऐसा नहीं है, और आप सिर्फ एक के लिए inuse निर्धारित करते हैं, और अन्य सभी रीसेट करने में समर्थ हैं, तो आप उपयोग कर सकते हैं:

UPDATE myTable 
SET InUse = CASE 
    WHEN myTable.id = @id THEN 1 
    ELSE 0 
END 
0

अपने डेटाबेस लेनदेन का उपयोग करता है, यह सबसे अच्छा तरीका है यह करने के लिए: यदि आप लेन-देन उपयोग नहीं कर रहे

update myTable set inuse = 0; 
update myTable set inuse = 1 where id = ?; 

, तो मामला का उपयोग अन्य जवाब सबसे अच्छा विकल्प है क्योंकि यह पोर्टेबल है। लेकिन इसे दो अद्यतन वक्तव्यों की तुलना में अधिक CPU समय की आवश्यकता होगी।

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