2012-09-15 15 views
6

के साथ सिंटेक्स त्रुटि मैं अपने आईएसपी पर होस्ट किया गया MySQL 5.1 का उपयोग कर रहा हूं। यह मेरा क्वेरी हैIF EXISTS अद्यतन ELSE INSERT

mysql_query(" 
IF EXISTS(SELECT * FROM licensing_active WHERE title_1='$title_1') THEN 
    BEGIN 
     UPDATE licensing_active SET time='$time' WHERE title_1='$title_1') 
    END ELSE BEGIN 
     INSERT INTO licensing_active(title_1) VALUES('$title_1') 
    END 
") or die(mysql_error()); 

त्रुटि

... check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM licensing_active WHERE title_1='Title1') THEN ' at line 1 

मेरे वास्तविक कार्य

WHERE title_1='$title_1' AND title_2='$title_2' AND version='$version' ...ETC... 

शामिल है, लेकिन मैं इसे नीचे कम कर दिया है मेरी समस्या को हल करने के लिए चीजों को सरल बनाने के लिए है

इस पर मेरी खोज में, मैं 'ऑन डिप्लिकेट कुंजी अपडेट' के संदर्भ देख रहा हूं, लेकिन यह नहीं पता कि टी ओ उसके साथ करो।

उत्तर

19

यहां एक आसान और आसान समाधान है, इसे आजमाएं।

$result = mysql_query("SELECT * FROM licensing_active WHERE title_1 ='$title_1' "); 

if(mysql_num_rows($result) > 0) { 
    mysql_query("UPDATE licensing_active SET time = '$time' WHERE title_1 = '$title_1' "); 
} 
else 
{ 
    mysql_query("INSERT INTO licensing_active (title_1) VALUES ('$title_1') "); 
} 
+2

यह मेरे लिए काम करता है, धन्यवाद। और समझने और याद रखने के लिए सीधा लगता है। यह अति-कुशल नहीं हो सकता है, लेकिन यह अभी तक एक उच्च ट्रैफ़िक एप्लिकेशन नहीं है इसलिए मुझे यकीन है कि यह विधि एक वर्ष या उससे अधिक के लिए ठीक रहेगी। धन्यवाद। – Openstar63

14

यह आप के लिए चाल करना चाहिए:

insert into 
    licensing_active (title_1, time) 
    VALUES('$title_1', '$time') 
    on duplicate key 
     update set time='$time' 

यह मानते हुए किया जाता है कि title_1 अपनी तालिका में एक अद्वितीय स्तंभ (डेटाबेस द्वारा लागू) है।

जिस तरह से insert... on duplicate काम करता है वह पहले एक नई पंक्ति डालने का प्रयास करता है, लेकिन अगर डालने को अस्वीकार कर दिया जाता है क्योंकि एक कुंजी इसे रोक देती है, तो यह आपको इसके बजाय कुछ फ़ील्ड अपडेट करने की अनुमति देगी।

+0

हाय फ्लफफेह। title_1 अद्वितीय नहीं है। मेरे पास एकमात्र अद्वितीय कॉलम एक int नामित आईडी है। इसे 'auto_increment', 'अद्वितीय' और 'प्राथमिक' के रूप में सेट किया गया है। मैं इसे सीधे एक्सेस नहीं करता हूं। मैं अभी भी एक ही त्रुटि के साथ संघर्ष कर रहा हूँ। – Openstar63

+0

काफी नहीं मिल सका, इसलिए मैंने PHP में तर्क किया - जैसा कि डार्क विश द्वारा वर्णित है। हालांकि धन्यवाद। – Openstar63

+0

मेरे लिए काम करता है जब मैं अंत में 'सेट' हटा देता हूं। यानी

(कॉल 1, कोल 2) मूल्य ('एफ 1', 'एफ 2') पर लागू करें कुंजी अद्यतन कॉल 2 = 'एफएन' –

0

आपकी क्वेरी का सिंटैक्स गलत है। चेकआउट http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html

परिणाम प्राप्त करने के लिए duplicate key syntax पर उपयोग करें। http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

+0

मैं इसका पालन नहीं कर सका, लेकिन धन्यवाद। – Openstar63

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