1. ホーム
  2. php

PHP MYSQL UPDATE if Exist or INSERT if not?

2023-09-17 13:22:16

質問

私はこれが少しも正しいかどうか全く分からない。私はフィールドが現在存在する場合はデータベースを更新し、存在しない場合は挿入したいと思うクラスを持っています。複雑なのは、私は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;
}

どのように解決するのですか?

以下のような構文をお探しだと思います。

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