2011-08-01 1 views
2

このリファクタリングは、私の頭の中で実行可能なようだが、私は誰かが私のロジックをチェックしたいと思います:新しいアイテムと編集アイテムの両方にREPLACE INTOを使用していますか?

現在のプロセス:

if (item == new) { 
    INSERT INTO basic_table 
    $itemUID = get last insert ID // item's UID 
    INSERT INTO another_table // more stuff 
    INSERT INTO another_table2 // more stuff 
    INSERT INTO another_table3 // more stuff 
} else { 
    $itemUID = $_POST['uid'] 
    UPDATE basic_table 
    REPLACE INTO another_table // more stuff 
    REPLACE INTO another_table2 // more stuff 
    REPLACE INTO another_table3 // more stuff 
} 

(注意 - 彼らので INTO REPLACEは既存のアイテムに使用されます

INSERT INTO // REPLACE INTOを除いてすべての後続クエリが同一であるため、私は次のようになりました。私はPDOを使用していますし、これらのクエリの各パラメータの多くを持っている、これはスペースのcraploadを救うことを考えると

if (item == new) { 
    INSERT INTO basic_table 
    $itemUID = get last insert ID // item's UID 
} else { 
    $itemUID = $_POST['uid'] 
    UPDATE basic_table 
} 
    REPLACE INTO another_table // more stuff 
    REPLACE INTO another_table2 // more stuff 
    REPLACE INTO another_table3 // more stuff 

:としてリファクタリングすることができ。

しかし、私はまずそれを投稿して、私が何かを見落とさないようにしたかったのです。

このリファクタリングで同じ結果が得られますか?

+0

4つすべてに 'REPLACE'を使用してみませんか? –

+0

INSERT..ON DUPLICATE KEY UPDATE文を見てください。 – Devart

答えて

1

プライマリキーの変更が気にならない場合は、REPLACEを使用してください。キーが他のテーブルにマップされている場合と同様に、キーが一貫性を保つ必要がある場合は、引き続きINSERTUPDATEを使用してください。 REPLACEが削除して再挿入するので、主キーがauto_incrementフィールドの場合、新しい増分値に変更されます。

関連する問題