電話ごとの機能の数が変更される場合は、削除して挿入する必要があります。更新するには、次のことが必要です。
- 現在の機能セットを取得する
- 何が違うのか、何が追加されたのか、何が削除されたのかを把握する
- クエリを実行して、更新、新しいデータの挿入、および古いデータの削除を行います。
リスト全体を削除して再挿入するかのように、メンテナンスの手間を省くことができます。
データの一貫性が問題または懸念事項である場合 (データは削除されますが、挿入の前にエラーが発生し、スクリプトが完了しません)、トランザクションでクエリをラップします。
次の例を見てください。
と のブログがPosts(id, title, body)
ありCategories(id, post_id, category)
ます。私の最初の投稿「Hello World」は、「meta、php、および javascript」に分類されています。それから 1 年後、mysql に関する情報を掲載するように投稿を修正し (または mysql カテゴリを追加し)、javascript を削除しました。
これが私がする必要があることです(主に疑似コード):
//old set
SELECT * FROM Categories WHERE post_id=1
foreach($categories as $category) {
if(in_array($category['id'], $_POST['categories']) {
//this category is in the new set and the old set, do nothing
}
elseif(!in_array($category['id'], $_POST['categories']) {
//this category is in the old set, but not the new one, delete it
$queries[] = "DELETE FROM Categories WHERE id=".$category['id'];
}
else {
//new category, add it
$queries[] = "INSERT INTO Categories()..."
}
}
foreach($queries as $item) {
//run query
}
これに対して:
DELETE FROM Categories WHERE post_id=$_POST['id']
foreach($_POST['categories'] as $item) {
INSERT INTO Categories() ...
}
個人的には、オプション 2 の方が優れていると思います。