मैंने उपयोग किया है ON DUPLICATE KEY UPDATE
बहुत। कुछ स्थितियों के लिए यह गैर-मानक SQL एक्सटेंशन है जो वास्तव में उपयोग करने योग्य है।
सबसे पहले, आपको यह सुनिश्चित करने की ज़रूरत है कि आपके पास एक अद्वितीय कुंजी बाधा है। ON DUPLICATE KEY UPDATE
फ़ंक्शन केवल तभी शुरू होता है जब कोई अद्वितीय कुंजी उल्लंघन होता।
यहां आमतौर पर इस्तेमाल किया जाने वाला प्रारूप है:
$query = "INSERT INTO $table (column1, column2, column3)
VALUES ('value-1', 'value-2', 'value-3')
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);"
column1 = values(column1)
का अर्थ है "कॉलम 1 को उस मान के साथ अपडेट करें जो डाला गया होता यदि क्वेरी ने डुप्लिकेट कुंजी उल्लंघन नहीं मारा होता।" दूसरे शब्दों में, इसका मतलब सिर्फ कॉलम1 को अपडेट करना है, अगर इंसर्ट ने काम किया होता तो क्या होता।
इस कोड को देखते हुए, यह सही नहीं लगता कि आप उन सभी तीन कॉलमों को अपडेट कर रहे हैं जिन्हें आप सम्मिलित करने का प्रयास कर रहे हैं। किस कॉलम पर एक अद्वितीय बाधा है?
संपादित करें:ओपी से प्रश्न के अनुसार mysql सम्मिलित विवरण के 'SET' प्रारूप के आधार पर संशोधित करें।
मूल रूप से उपयोग करने के लिए ON DUPLICATE KEY UPDATE
, आप सामान्य रूप से सम्मिलित विवरण लिखें, लेकिन ON DUPLICATE KEY UPDATE
जोड़ें खंड अंत पर कील किया। मेरा मानना है कि इसे इस तरह काम करना चाहिए:
INSERT INTO $table
set column1 = 'value-1',
column2 = 'value-2',
column3 = 'value-3'
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);
दोबारा, आपके द्वारा सम्मिलित किए जा रहे स्तंभों में से एक में एक अद्वितीय अनुक्रमणिका (या स्तंभों का संयोजन) होना चाहिए। ऐसा इसलिए हो सकता है क्योंकि उनमें से एक प्राथमिक कुंजी है या क्योंकि टेबल पर एक अद्वितीय अनुक्रमणिका है।