2011-07-28 21 views
59

Nie mam pojęcia, czy jest to nawet poprawne. Mam klasę, w której chciałbym zaktualizować bazę danych, jeśli pola istnieją lub wstawić, jeśli nie. Powikłaniem jest to, że robię łączenie 3 tabel (set_colors, school_art, baseimage).PHP MYSQL UPDATE, jeśli istnieje lub INSERT, jeśli nie?

Każda pomoc byłaby naprawdę świetna.

Oto co mam:

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; 

}

Z góry dzięki.

Odpowiedz

164

wierzę szukasz następującej składni

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

Aby być bardziej poprawnym, nie potrzebujesz wskazania kluczy podstawowych. Więc jeśli pole 1 jest kluczem, to ...... WŁĄCZ DUŻĄ AKTUALIZACJĘ KLAWISZY pole2 = "wartość2", pole3 = "wartość3", ... (począwszy od pola2) – giacoder

32

dwie możliwości:

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

lub

MySQL Manual :: REPLACE INTO Syntax

Zarówno pozwoli Ci zrobić insert-or-update-gdyby-nie-istnieje w jednym zapytaniu.

+0

Dzięki, REPLACE INTO jest znacznie lepsze dla mojego przypadku inaczej musiałbym nazwać „$ query-> send_long_data (1, $ buff)” dwa razy , jeden dla INSERT i jeden dla UPDATE – marco

+3

Nooo ... Jeśli używamy "REPLACE INTO", inne dane z tabeli OBCEGO klucza zostaną usunięte, jeśli dane PRIMARY istnieją. –

Powiązane problemy