1

我有一个带有下一个字段的 MySQL 表:

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

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

现在我想以某种方式实现历史。因此,如果我曾经删除了一行,我希望在可以说“历史”sql 表中看到这一点。我想按用户和日期存储所有事件(添加或删除),仅此而已。

我应该如何处理这个?

4

4 回答 4

2

我建议使用触发器

本文应该可以帮助您掌握使用触发器的方法: http: //codepatter.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 提出的方式是一种可能性)

当您想要显示历史记录时,您可以轻松选择一个用户按时间戳排序的所有操作。

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

于 2012-07-16T14:52:47.223 回答
0

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

于 2012-07-16T18:06:47.263 回答
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 回答