2011-07-28 133 views
59

我不知道這是否是遠程正確的。我有一個類,我想更新數據庫,如果字段存在或插入,如果他們不。複雜的是,我正在做一個加入3桌(set_colors,school_art,baseimage)PHP MYSQL更新如果存在或插入,如果不是?

任何幫助將是非常好的。

以下是我有:提前

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

爲了更加正確,您不需要指示主鍵。因此,如果field1是密鑰,那麼 ...... 在重複密鑰更新 field2 ='value2',field3 ='value3',...(以field2開頭) – giacoder

32

兩個選擇:

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

MySQL Manual :: REPLACE INTO Syntax

雙方將允許你這樣做鑲片或更新 - 如果 - 不存在一個查詢。

+0

謝謝,REPLACE INTO是多少我的情況更好,否則我不得不稱之爲「$查詢 - > send_long_data(1,$ BUFF)」兩次,一個用於INSERT,另一個用於更新 – marco

+3

Nooo ...如果我們使用「REPLACE INTO」,如果PRIMARY數據存在,另一個FOREIGN KEY相關表的數據將被刪除。 –

相關問題