2011-07-28 18 views
59

मुझे नहीं पता कि यह दूरस्थ रूप से भी सही है या नहीं। मेरे पास एक कक्षा है जहां मैं डेटाबेस को अपडेट करना चाहता हूं यदि फ़ील्ड वर्तमान में मौजूद हैं या यदि वे नहीं करते हैं तो डालें। जटिलता यह है कि मैं 3 टेबल (set_colors, school_art, baseimage) में शामिल हो रहा हूंPHP MYSQL अद्यतन अगर मौजूद है या INSERT नहीं है?

कोई भी मदद वास्तव में महान होगी।

public function set_layer_colors($value) { 
global $db; 

$result_array = mysql_query(" 
IF EXISTS(SELECT * FROM set_colors WHERE school_art_id = '{$value}') 

    UPDATE set_colors (school_art_id, baseimage_id, sub_folder, layer) 
    SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer 
    FROM school_art 
    JOIN baseimage ON baseimage.base_folder = school_art.series_code 
    WHERE baseimage.image_type = 'B' ORDER BY school_art.id 

ELSE 

INSERT INTO set_colors (school_art_id, baseimage_id, sub_folder, layer) 
    SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer 
    FROM school_art 
    JOIN baseimage ON baseimage.base_folder = school_art.series_code 
    WHERE baseimage.image_type = 'B' ORDER BY school_art.id 
    "); 

return $result_array; 

}

अग्रिम धन्यवाद:

यहाँ मैं क्या है।

उत्तर

164

मेरा मानना ​​है कि आप निम्न सिंटैक्स के लिए देख रहे

INSERT INTO <table> (field1, field2, field3, ...) 
VALUES ('value1', 'value2','value3', ...) 
ON DUPLICATE KEY UPDATE 
field1='value1', field2='value2', field3='value3', ... 
+3

अधिक सही होने के लिए आपको प्राथमिक कुंजी के संकेत की आवश्यकता नहीं है। तो यदि फ़ील्ड 1 एक कुंजी है तो ...... डिप्लिकेट कुंजी अपडेट फ़ील्ड 2 = 'वैल्यू 2', फ़ील्ड 3 = 'वैल्यू 3', ... (फ़ील्ड 2 से शुरू) – giacoder

32

दो विकल्प:

MySQL Manual :: INSERT INTO ... ON DUPLICATE KEY UPDATE Syntax

या

MySQL Manual :: REPLACE INTO Syntax

दोनों आप डालने या अद्यतन-अगर-नहीं-मौजूद है एक क्वेरी में करने की अनुमति देगा।

+0

धन्यवाद, REPLACE में काफी मेरे मामले के लिए बेहतर नहीं तो मैं "$ query-> send_long_data (1, $ शौकीन)" दो बार फोन करने के लिए होगा है , INSERT के लिए एक और अद्यतन – marco

+3

Nooo के लिए एक ... यदि हम "स्थानांतरित करें" का उपयोग कर रहे हैं, तो प्राथमिक डेटा मौजूद होने पर अन्य विदेशी कुंजी संबंधित तालिका का डेटा हटा दिया जाएगा। –

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