如何实现mysql事件的历史?

时间:2012-07-16 14:47:03

标签: php mysql html

我有一个包含下一个字段的MySQL表:

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

我有一个基于Web的UI,用于显示数据(数据,用户和日期),人们也可以添加或删除数据。结果正确地显示在表中。

现在我想以某种方式实现历史。所以,如果我一次删除一行,我希望在一个让我们说'历史'的SQL表中看到它。我希望按用户和日期存储所有事件(添加或删除),这就是全部。

我该如何处理?

4 个答案:

答案 0 :(得分:2)

我建议使用triggers

本文应该帮助您掌握使用触发器的方法:http://codespatter.com/2008/05/06/how-to-use-triggers-to-track-changes-in-mysql/

答案 1 :(得分:1)

使用所提供的信息回答并不容易。换句话说:你的问题非常笼统。

我会尝试回答:我认为你应该设置一个表历史记录,其中外键是user_id。然后,您只需保存该表中的每个操作(添加,删除等)以及user_id和时间戳,并说明添加或删除的数据或任何其他信息可能有用。 (更新: @Gibbs提出的方式是一种可能性)

如果要显示历史记录,可以轻松选择按时间戳排序的所有操作。

还有一件事:使用日期时间格式(例如时间戳)比使用VARCHAR更好

答案 2 :(得分: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;来查询表格以查找“实时”行,这样,其余的就是历史记录。

答案 3 :(得分:0)

我现在实际上创造了自己的“历史”。我为历史条目创建了另一个表,并编写了另一个函数(php),每当有人添加/删除某些内容并将数据写入预先创建的表时,该函数就会执行。然后我只是在“历史记录”页面中显示数据,它运作良好。