2012-04-27 12 views
9

में डिप्लिकेट कुंजी अपडेट के साथ मेरे पास एक PHP स्क्रिप्ट है जो एक MySQL क्वेरी चलाती है।आईएफ() का उपयोग करके MySQL

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)"; 

यहाँ मैं क्या करने की कोशिश कर रहा हूँ है: Col1 प्राथमिक कुंजी है। यदि कोई डुप्लिकेट है, तो यह देखने के लिए जांच करता है कि col2 के लिए सम्मिलित मान शून्य है या नहीं। यदि नहीं, तो यह मान के साथ अपडेट होगा, अन्यथा मूल्य वही रहेगा।

यह सम्मिलन विफल रहता है। शून्य तुलना नहीं है के लिए 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IS NOT NULL.....'

मैं MySQL संदर्भ मैनुअल जाँच कर ली है: त्रुटि कोड: जब मैं sqlyog में मैन्युअल रूप से इसे चलाने का प्रयास (चर के स्थान पर वास्तविक मान डालने), मैं निम्नलिखित त्रुटि मिलती है ऑपरेटर (http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null), और INSERT के लिए ... डिप्लिकेट कुंजी अपडेट सिंटेक्स (http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) पर विश्वास करें और मेरा मानना ​​है कि मैं सही ढंग से दोनों का उपयोग कर रहा हूं, लेकिन जाहिर है कि यह मामला नहीं है।

मैं क्या गलत कर रहा हूं?

संदर्भ के लिए, मैं MySQL 5 का उपयोग कर रहा हूं और स्क्रिप्ट RHEL5 सर्वर पर चल रही है।

उत्तर

12

वाक्यविन्यास IS NOT NULL column गलत है। सही: column IS NOT NULL। मुझे यकीन नहीं है कि यह 'test' क्या है। आप कहते हैं कि आप या तो कॉलम को अपडेट करना चाहते हैं या इसे रखना चाहते हैं।

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE col2 = IF('$val2' IS NOT NULL, '$val2', col2)"; 

जो भी लिखा जा सकता है:

$query = "INSERT INTO table (col1, col2) 
      VALUES('$val1', '$val2') 
      ON DUPLICATE KEY UPDATE 
      col2 = COALESCE(VALUES(col2), col2)"; 
+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! इसके अलावा, 'परीक्षण' मूल्य एक निरीक्षण था; यह एक मूल्य था जिसे मैं परीक्षण करते समय col2 के लिए उपयोग कर रहा था, और इसे हटाने के लिए भूल गया था। –

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