1

次のフィールドを持つMySQLテーブルがあります。

id int(11) primary auto_increment
data(text)
user varchar(20)
date text 

私はphpを使用したWebベースのUIを持っており、データ(データ、ユーザー、日付)を表示し、ユーザーはデータを追加または削除することもできます。結果は適切にテーブルに表示されます。

今、私は何とかして歴史を実装したいと思います。したがって、たとえば1つの行を一度削除した場合、これを「履歴」と言うSQLテーブルに表示したいと思います。すべてのイベント(追加または削除)をユーザーおよびコースの日付ごとに保存したいのですが、それだけです。

これにどのようにアプローチすればよいですか?

4

4 に答える 4

2

トリガーの使用をお勧めします。

この記事は、トリガーを使用したアプローチを理解するのに役立ちます:http: //codespatter.com/2008/05/06/how-to-use-triggers-to-track-changes-in-mysql/

于 2012-07-16T14:52:15.977 に答える
1

提供された情報で答えるのはそれほど簡単ではありません。言い換えれば、あなたの質問は非常に一般的です。

とにかく答えようとします。外部キーがuser_idになるテーブル履歴を設定する必要があると思います。次に、そのテーブルのすべてのアクション(追加、削除など)をuser_idとタイムスタンプとともに保存し、追加または削除されたデータやその他の有用な情報を伝えます。(更新: @Gibbsが提案した方法は1つの可能性です)

履歴を表示する場合は、タイムスタンプ順に1人のユーザーが実行したすべてのアクションを簡単に選択できます。

もう1つ、VARCHARを使用するよりも、日付に日時形式(タイムスタンプなど)を使用する方がはるかに優れています。

于 2012-07-16T14:52:47.223 に答える
0

テーブルのすべてのインスタンスが保存されるようにしますが、構造内に「ライブ」行を表示する新しい列を追加します。

例えば:

------------------------------------------------
- id - user - data - live- date                -
------------------------------------------------
- 1  - 53   - ???  - 0   - 2012-07-16 15:51:45 -
- 1  - 53   - ???  - 0   - 2012-07-16 15:45:45 -
- 1  - 53   - ???  - 1   - 2012-07-16 14:51:42 -
- 1  - 53   - ???  - 0   - 2012-07-16 15:12:45 -
- 1  - 53   - ???  - 0   - 2012-07-16 13:54:21 -
- 1  - 53   - ???  - 0   - 2012-07-16 11:41:33 -
------------------------------------------------

次に、テーブルにクエリを実行して、「ライブ」行を追加します。そうWHERE live=1;すれば、残りは履歴になります。

于 2012-07-16T14:53:32.117 に答える
0

私は実際に今、自分の「歴史」を作りました。履歴エントリ専用の別のテーブルを作成し、誰かが何かを追加/削除して、事前に作成されたテーブルにデータを書き込むたびに実行する別の関数(php)を作成しました。次に、「履歴」ページにデータを表示するだけで、十分に機能します。

于 2012-07-16T18:06:47.263 に答える