0

次の表の行を検討してください。

ID  | First Name | Last Name | Email           | Age
____________________________________________________
1   | John       | Smith     | john@smith.com  | 23
2   | Mohammad   | Naji      | me@naji.com     | 26

が発生したときupdate、例えば。アカウントのメールアドレスが変更された場合、その変更をどのように検出すればよいですか?

ウェブサイト管理者のために、変更点を太字にする必要があります。

行の以前のリビジョンを保存していないため、現在のデータベース スキーマではサポートされていません。

今、私にとって最も費用のかからない解決策を教えてください。

4

2 に答える 2

1

スキーマになんらかの変更を加えない限り、変更を追跡することはできません。少なくとも、それを行うテーブル (またはテーブル) が必要です。

a) 変更を行うコードを変更することにより、更新が行われるときに変更を明示的に追跡することができます。これらは多くの場所にある可能性があるため、これには時間がかかる可能性があります。b)行が更新されるたびに古いバージョンを新しいテーブルに自動的にコピーするデータベースにmySQL トリガーを実装して、変更を追跡します。

いずれの場合も、現在のテーブルと変更テーブルの両方をクエリして、強調表示する必要がある変更を確認する必要があります。

また、変更を強調表示する必要がなくなった時点を判断する必要もあります。変更テーブルから古い行を削除するだけで変更が削除されますが、いつ削除するかを決める必要があります。MySQL イベントを使用して定期的に変更を選別するか、このメンテナンスをシステム内の他のトリガーまたはアクションに関連付けることができます。

実装の詳細は、システムと期待に基づいて決定する必要があります。

トリガーとイベントを使用すると、変更を強調表示する必要がある場合を除いて、変更をデータベースに限定できるという利点があります。

于 2013-06-17T08:33:52.447 に答える
1

PHP で関数を作成し、それを使用してデータを更新できます。

function update_row($new_row, $id)

パラメーター:

  1. $new_row は連想配列です: array("column name" => new column value)
  2. $id - 更新する行の ID

関数は次のように機能します。

  1. id = $id の現在の行を $old_row に選択

  2. 古い行と新しい行を比較し、列を更新します。

    $columns_updated = 配列();

    foreach($new_row as $key => $value){

       if($new_row[$key] != $value)
       {
           array_push($key);
       }
    

    }

  3. id=$id の行を $new_row に更新します

  4. $columns_updated を返す

于 2013-06-17T08:29:29.703 に答える