1

私は現在次のものを持っていますupdate statementが、とにかく現在の値を保持するようにすることができますが、データベースにない新しい値を挿入しますか?

そうでない場合、これを達成するための最良の方法は何でしょうか?

UPDATE INTO {refocus_candidate_category} SET canid=?, categoryid=? WHERE canid=? AND categoryid=?",array($emailCheck['id'], $id, $emailCheck['id'], $id));

働き:

$catParams = array_merge(array($emailCheck['id']), $fields['Occupation']);
$catPlaceholders = '?'.str_repeat(',?',count($fields['Occupation'])-1);

$catCheck = CMS::selectQuery("SELECT * FROM {table} WHERE canid=? AND categoryid IN (".$catPlaceholders.")", $catParams);

if($catCheck != FALSE)
{
    for($i=0; $i<count($fields['Occupation']); $i++) {
        $id = $fields['Occupation'][$i];

        CMS::updateQuery("UPDATE INTO {table} SET canid=?, categoryid=? WHERE canid=? AND categoryid=?",array($emailCheck['id'], $id, $emailCheck['id'], $id));
    }
        echo 'found update';
}

IDプリント

    $fields['Occupation'][$i] = 1678 
4

1 に答える 1

2

あなたの質問からあなたが何を意味するのか正確にはわかりませんが、欠落している値またはすでに存在する値を処理する挿入/更新の代替案がいくつかあります。

まず、mysqlに挿入するだけで、新しい行を作成するか、既存の行を置き換える場合(既存の行は主キーの一致によって決定されます)、INSERTINTOの代わりにREPLACEINTOを使用します。REPLACE INTOは挿入を試みますが、主キーがすでに存在する場合は、クエリをDELETEに変換してから、INSERTを再試行します。

新しい行を挿入したいが、既存の行がすでにある場合はそのままにしておく場合は、INSERT IGNORE INTOを使用できます(データ型または列情報が間違っている場合は挿入に失敗する可能性があります)。 。)またはINSERT INTO ... ON DUPLICATE KEY UPDATEを使用すると、既存のアイテムの挿入を処理する方法をより細かく制御できます。

他のオプションもありますが、おそらくそれらが最も関連性があります。

于 2012-09-21T22:16:53.880 に答える