sql >> データベース >  >> RDS >> Mysql

CakePHP3でINSERTONDUPLICATE KEY UPDATE、別名アップサートを実装するにはどうすればよいですか?

    https://stackoverflow.com/a/24990944/80353 で提供された回答を使用する 、質問で与えられたコードサンプルを使用してこれを言い換えたいと思います。

    次のレコードでアップサートを実行するには

    Felicia, 27
    Timmy, 71
    

    このテーブルに

    +----+----------+-----+
    | id | username | age |
    +----+----------+-----+
    |  1 | admin    |  33 |
    |  2 | Timmy    |  17 |
    |  3 | Sally    |  23 |
    +----+----------+-----+
    

    最良の方法はそれを

    と書くことです
    $newUsers = [
        [
            'username' => 'Felicia',
            'age' => 27,
        ],
        [
            'username' => 'Timmy',
            'age' => 71,
        ],
    ];
    
    $columns = array_keys($newUsers[0]);
    
    $upsertQuery = $this->Users->query();
    
    $upsertQuery->insert($columns);
    
    // need to run clause('values') AFTER insert()
    $upsertQuery->clause('values')->values($newUsers);
    
    $upsertQuery->epilog('ON DUPLICATE KEY UPDATE `username`=VALUES(`username`), `age`=VALUES(`age`)')
                    ->execute();
    

    これ を確認してください epilogの詳細については

    これ を確認してください 単一のクエリに複数のレコードを挿入する方法の詳細については、こちらをご覧ください




    1. 自己参加について説明する

    2. Pythonパンダto_sql'追加'

    3. SQLをS3バケットからAWSec2(インスタンス)にインポートできますか?

    4. 一致属性を見つけるためのSQLクエリ