2011-07-28 29 views
59

Bunun uzaktan doğru olup olmadığını bilmiyorum. Alanlar mevcutsa veya eklemeselerse veritabanını güncellemek istediğim bir sınıfım var. komplikasyon ben katılmadan 3 tablolar (set_colors, school_art, baseimage)PHP Varsa veya yoksa INSERT ise MYSQL UPDATE?

Herhangi bir yardım gerçekten çok iyi olurdu yapıyorum olmasıdır. peşin

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; 

}

Teşekkür: Burada

ben ne var.

cevap

164

Ben aşağıdaki sözdizimi için

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

Daha doğru olması için Birincil anahtarların belirtilmesine gerek yoktur. Yani field1 bir anahtar ise DUPLICATE ANAHTAR GÜNCELLEME alanı2 = 'değer2', field3 = 'değer3' ... ... (alan2 ile başlayan) – giacoder

32

İki seçenek:

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

veya

MySQL Manual :: REPLACE INTO Syntax

İkisi

Eğer insert-ya-güncelleme-not-varsa-tek sorguda yapmanızı sağlayacaktır.

+0

Teşekkür arıyoruz inanıyoruz INTO aksi iki kez "$ query-> send_long_data (1 $, devetüyü)" demelisiniz benim durumumda için çok daha iyidir DEĞİŞTİRİN , INSERT diğeri UPDATE – marco

+3

için bir Nooo ... biz İLKÖĞRETİM veri mevcut ise diğer yabancı anahtar ilişkili tablonun verileri silinir ki, "replace into" kullanıyorsanız. –