2011-07-28 29 views
59

これが遠隔で正しいかどうかはわかりません。フィールドが現在存在する場合はデータベースを更新したい場合はクラスがあり、存在しない場合は挿入します。合併症は私が3つのテーブル(set_colors、school_art、baseimage)を結合していることです。PHP MYSQL UPDATE(存在する場合)または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

私はおかげで、REPLACE INTOがそうでなければ、私は二回「$ query-> send_long_data(1、$バフ)」をコールする必要があると思います私の場合のためにはるかに優れているあなたは、次の構文

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

もっと正確にするために、主キーの表示は必要ありません。したがって、フィールド1がキーの場合、 ...... 重複キー更新時 field2 = 'value2'、field3 = 'value3'、...(フィールド2で始まる) – giacoder

32

つの選択肢:

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

または

MySQL Manual :: REPLACE INTO Syntax

両方を使用すると、1つのクエリで、存在しませ挿入-または更新-IF-行うことができます。

+0

を探していると信じて1つはINSERT用、もう1つはUPDATE用 – marco

+3

Nooo ... "REPLACE INTO"を使用している場合、PRIMARYデータが存在する場合、他のFOREIGN KEY関連テーブルのデータは削除されます。 –

関連する問題