0

私はすでにこれを読んだ:

値が変更された場合にのみデータベースに挿入するにはどうすればよいですか?

だから私の質問は非常に近いですが、まったく同じではありません。

4つの「メイン」列を持つテーブルがあります(つまり、すべてのテーブルに同じ4つの列があります):

  • id- int - autoinc
  • id_origin- int - 最初のレコードが作成されたときの ID
  • date_v_start- datetime - レコードの有効期間の開始日
  • date_v_end- datetime - レコードの有効期限 (NULL現在の「有効な」レコードの場合)

このテーブルに固有のその他のフィールドを次に示します。 - summary- テキスト - detail- テキスト

これを知っているので、そのテーブルに変更されたものがある場合は、次のようにします。

  • date_v_end現在のレコードを「now()」に更新します
  • 新しいレコードを挿入します。 date_v_start=date_v_endは前のもの、id_origin= は前のものと同じ、 - date_v_end=NULLおよび (もちろん) および の新しい値summaryですdetail

summary私の問題は、との値がdetail変更されていない場合、その新しいレコードを挿入したくないということです。それは時間とハード ドライブのスペースの無駄です。

次のようなことを(可能であれば一発で)行う方法はありますか?

「もしsummary<>'a value' or detail<>'another value' then update this record and insert this new one

?

したがって、私の質問と上記のリンクの違いは次のとおりです。-比較するフィールドが複数あります-2つのリクエストがあります-可能であれば1つのリクエストで作成したいと思います。

4

1 に答える 1

0

これが、1つの「phpクエリ」=中央にコンマが含まれる1つの文字列で行った方法です(非常に時間がかかりますが、Webサーバーで処理できなくなった場合はいつか変更します)。

CREATE TEMPORARY TABLE tmp
SELECT * FROM table
WHERE id=:id;
ALTER TABLE tmp drop ID;
INSERT INTO table
SELECT 0,tmp.* FROM tmp;
DROP TABLE tmp:
UPDATE table
SET date_v_fin=NOW()
WHERE id=LAST_INSERT_ID();
于 2012-04-27T09:17:32.467 に答える