75

我不知道这是否正确。我有一个类,如果字段当前存在,我想更新数据库,如果不存在则插入。复杂之处在于我正在加入 3 个表(set_colors、school_art、baseimage)

任何帮助都会非常棒。

这是我所拥有的:

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;
}
4

2 回答 2

192

我相信您正在寻找以下语法:

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

注意:如果使用ON DUPLICATE KEY UPDATE,每行的受影响行值是1如果该行作为新行插入2,如果现有行被更新,以及0现有行是否设置为其当前值

MySQL 文档:INSERT ... ON DUPLICATE KEY UPDATE Statement

于 2011-07-28T01:39:34.240 回答
34

两种选择:

MySQL 手册 :: INSERT INTO ... ON DUPLICATE KEY UPDATE 语法

或者

MySQL 手册 :: REPLACE INTO 语法

两者都允许您在一个查询中执行 insert-if-not-exists-or-update。

于 2011-07-28T01:28:43.020 回答