2009-01-16 13 views
59

मदों के लिए नकली चाबी अद्यतन मैं इसINSERT INTO .. ​​पर एक से अधिक

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value') 
ON DUPLICATE KEY UPDATE 
t.c = 'value'; 
INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = 'value2'; 

t.a और t.b की तरह कुछ करना चाहता हूँ चाबियाँ हैं। यह सब ठीक काम करता है लेकिन मुझे दूसरे डालने पर एक त्रुटि मिलती है। PhpMyAdmin के साथ इस तरह की एक क्वेरी ठीक काम करती है लेकिन मुझे लगता है कि यह स्वतंत्र रूप से प्रश्नों को चला रहा है क्योंकि यह उस क्वेरी के परिणामों को टिप्पणियों के रूप में प्रिंट करता है?

ऐसा कुछ भी अच्छा होगा लेकिन मुझे प्रत्येक आइटम के लिए अलग-अलग मूल्यों की आवश्यकता होगी। मैं इसे पसंद करता हूं लेकिन मुझे यकीन नहीं है कि मैं प्रत्येक मान के लिए अद्यतन पर मूल्य कैसे बदल सकता हूं।

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value'), ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = ??? 

समस्या प्रश्न चिह्न में है, मैं वहाँ क्या कर दिया, ताकि प्रत्येक सम्मिलित/अपडेट सही मान होगा करना चाहिए? जाहिर है अगर मैं एक मूल्य डालता हूं तो सभी फ़ील्ड उस मान को प्राप्त करेंगे।

यदि दो कुंजी के साथ एकाधिक फ़ील्ड पर "अपडेट मौजूद है, अन्यथा डालें" क्वेरी करने का दूसरा तरीका है, तो मैं अन्य विचारों के लिए भी हूं। मुझे लगता है कि मैं प्रत्येक क्वेरी को अलग से चला सकता हूं (जैसे phpMyAdmin?) लेकिन यह बहुत सारे प्रश्न होने जा रहा है, इसलिए मैं वास्तव में इससे बचना चाहता हूं। मान

उत्तर

139

उपयोग() फ़ंक्शन

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value'), ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = VALUES(t.c) 

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+2

शानदार! और आप बहुत ही अनजान होने के लिए एसक्यूएल को डरते हैं ... – pixelfreak

+2

mysql> परम (आईडी, संख्या) मूल्यों (3,4) पर लागू करें कुंजी अद्यतन आईडी = मूल्य ( डी) +222; क्वेरी ठीक है, 2 पंक्तियां प्रभावित (0.67 सेकंड) – zloctb

36

भी टिप्पणी के लिए प्रतिनिधि पर कम देखते हैं, लेकिन मैं एक से थोड़ा अधिक जटिल वाक्य रचना कि प्रतिक्रिया ʞɔıu @ से प्रेरित था जोड़ना चाहते थे।

INSERT INTO t (t.a, t.b, t.c, t.d) 
VALUES ('key1','key2','value','valueb'), ('key1','key3','value2','value2b') 
ON DUPLICATE KEY UPDATE 
t.c = VALUES(t.c), 
t.d = VALUES(t.d) 

आशा है कि किसी को वहाँ बाहर में मदद करता है नकली चाबी अद्यतन पर एक से अधिक के साथ थोक डालने प्रदर्शन करने के लिए देख: नकली चाबी पर एक से अधिक क्षेत्रों को अपडेट करें। वाक्यविन्यास मुझसे बच निकला।

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