2013-05-23 28 views
5

私はMySQLとPHPでデータベースアプリケーションを開発中です。この瞬間、私は最後のUPDATEによって引き起こされた変更を取得しようとしています。この問題を解決するための私の最初の方法は、UPDATE MySQL:最終更新の変更方法

  • は、PHP
  • との配列を比較する
  • SELECTでの「新しい」状態を取得して、変更を行うSELECT
  • で「古い」状態を取得

    • です

    は、これらの

    はこれを短縮する方法はあります... 3のmysql-接続されていますか?

  • +2

    フォームをローカルに読み込んだときに元の状態を保存してから、アップデートで送信しているものをローカルで比較してください。変更を把握するためにMySqlを呼び出す理由はありません。 – JCleveland

    +0

    とにかく、あなたは基本的にメモリに意図した "新しい"状態を持っているので、少なくとも2番目のSELECTを保存することができます。あなたのUPDATEが何のエラーも報告しない限り、あなたはデータベースの状態があなたの思うものになるという事実にかなり依存することができます。もっと言ってみると、そのデルタを使って何をしようとしているのか正確に知ることはいいでしょう。 – joerx

    +0

    影響を受ける行の数を特定するだけで済みますか、詳細なデータ比較が必要ですか? –

    答えて

    1

    私はそれを行う方法を教えて聞かせて、

    私は、行の更新、最初に私が更新していると私はactive recordsそれらを呼び出すどの行を取得します。次に、active recordsの各列をフォームフィールドと比較します。それがどの列が変更されたかを知る方法です。

    変更された列を保存する場合は、historyのようなテーブルを作成します。

    id  (for primary key) 
    tablename (which table i'm updating) 
    recordid (which row i'm updating) 
    column (which columns has been changed) 
    oldvalue (active record value) 
    newvalue (form value-updated value) 
    date  (obvious) 
    user  (who did this change) 
    

    その後、使用する方法に想像力を使用することができます。

    1

    また、あなたは(更新日時、ユーザなど)を保存したい追加の状態データ

    が含まれている履歴テーブルにレコードの全体のコピーをプッシュしますbefore update triggerをこの方法を行うことができますがありますどのようなレコードで起こったのかについて完全な改訂履歴があり、それは透過的に起こるはずです。履歴テーブルから一意の制約を削除する必要があることだけを覚えておいてください。

    これが役に立ちます。

    関連する問題