顧客 CMS では、顧客は住所や姓名の変更など、個人情報を更新できます。そのためにmysqlUPDATE
クエリを使用します。
このような作業の問題点は、人々が自分の情報を変更できることです。たとえば、名前を からjohn doe
に変更しasdfdas
ます。彼らの古い情報を保存したいと思います。
私のオプションは何ですか?これを行う最善の方法は何ですか?
ユーザーが一意の ID を持っていると仮定すると、old_user_information
テーブルを持つことができ、更新を行うときにそのテーブルにも新しいエントリを作成できます。テーブルには、自動生成された ID と、一意のユーザー ID および残りのユーザーの過去の情報が含まれます。
ユーザーはこのテーブルに複数の行を持つことができますが、実際のUsers
テーブルには 1 つの行しかありません。
編集: もし私があなただったら、これらの両方を実行するストアド プロシージャを作成して、変更があった場合に管理しやすくします。
このようなものを含むテーブルを作成できます
`yourTableID, field, value, date`
これをトリガーで更新します。update
古い値が変更された場合にそれを追加するトリガーを作成します。トリガーの詳細については、こちらのマニュアルを参照してください。
トリガーを使用したくない場合は、明らかにロジックで同じことを行うことができます。履歴テーブルを古い値で更新するだけです。ただし、更新する必要があるかどうかを判断するには、いくつかのトリックが必要ですが、複雑なことは何もありません。
何が起こったのかを簡単に取得するには、「oldvalue」と「newvalue」のようなものを追加したいかもしれませんが、後者は実際には必要ありません。「古い」値として次の更新に含まれているか、現在の値であるためです。
フィールド名のバージョンを追加し、更新の代わりに挿入を使用します
column
更新されるデータの新しい列を作成します。prior_to_update_column
更新時に、古い情報をに移動しますprior_to_update_column
ユーザーが再度更新する場合は、 (配列のように見えるように)でprior_to_update_column
区切られたものに追加します。,
これにより、ユーザーが更新した以前の情報がすべて保持されます
その答えのとうりに、やってない。 UPDATE table name
SET column
= column
+'new value' WHEREcondition