PHP MYSQL 更新如果存在或插入,如果不存在?

我都不知道这是不是真的。我有一个类,我想更新数据库,如果字段当前存在或插入,如果他们不存在。复杂的是,我正在做一个连接3个表(set _ color,school _ art,base image)

任何帮助都可以。

以下是我所知道的:

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;
}
109761 次浏览

两个选择:

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

或者

替换成语法

两者都允许您在一个查询中执行插入-如果不存在或更新。

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

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