2

SOに関する他の質問から直接の回答が得られないため、もう一度質問します。

私の状況は次のとおりです。2つのテーブルphonesfeatures.

構造:

電話

  • ID
  • brand_id
  • モデル
  • 写真
  • 公開された

特徴

  • ID
  • 電話番号
  • 特徴

現在、featuresには多くの値が含まれており、1 と 4 の間のみが を介して特定の電話に対応しphone_idます。

さて、私が地物を更新するとき、新しい地物を削除してから再度挿入するか、既存の地物を更新するのが最善だと思いますか?

// 編集:

特別

  • ID*
  • 電話番号
  • contract_id
  • start_publish
  • 終了_公開
  • 公開された

契約する

  • ID*
  • 名前
  • 利点
  • 間隔
  • 価格など

ブランド

  • ID
  • 名前
  • ロゴ

したがって、基本的には、電話番号と契約書を特別にリンクし、両方のテーブルから情報を取得して出力します。次に、そのプロセス中に、各電話の機能が関数を使用して個別に読み込まれます。

// 編集 2:

ああ、一度に1 つの電話の機能のみが削除/更新されます。また、一度に 1 ~ 4 の機能のみが削除されます。また、機能は常に多かれ少なかれ、一定の数になることはありません。

4

3 に答える 3

2

「機能を更新する」ときは、まさにそれを行いますupdate.

于 2012-04-24T23:04:46.303 に答える
1

UPDATE を使用する必要があります。または、削除と挿入を 1 つの REPLACE コマンドで行うこともできます。

http://dev.mysql.com/doc/refman/5.0/en/replace.html

また、機能を共有できる場合 (多対多の関係)、電話 ID のみを機能 ID にリンクする 3 番目のテーブルを検討することもできます。

于 2012-04-24T23:08:39.580 に答える
0

電話ごとの機能の数が変更される場合は、削除して挿入する必要があります。更新するには、次のことが必要です。

  • 現在の機能セットを取得する
  • 何が違うのか、何が追加されたのか、何が削除されたのかを把握する
  • クエリを実行して、更新、新しいデータの挿入、および古いデータの削除を行います。

リスト全体を削除して再挿入するかのように、メンテナンスの手間を省くことができます。

データの一貫性が問題または懸念事項である場合 (データは削除されますが、挿入の前にエラーが発生し、スクリプトが完了しません)、トランザクションでクエリをラップします。

次の例を見てください。

と のブログが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 の方が優れていると思います。

于 2012-04-24T23:09:36.277 に答える