gpt4 book ai didi

php - 更好的日志记录设计或一些 SQL 魔法?

转载 作者:行者123 更新时间:2023-11-30 21:24:00 28 4
gpt4 key购买 nike

我竭力修改一些不是我写的旧日志记录代码,想知道您对它的看法。这是一个用 PHP 和 MySQL 编写的事件记录器,记录如下消息:

Sarah added a user, slick101
Mike deleted a user, slick101
Bob edited a service, Payment

像这样分解:

Sarah [user_id] added a user [message], slick101 [reference_id, reference_table_name]

变成这样的表格:

log
---
id
user_id
reference_id
reference_table_name
message

请注意,上面示例消息中的“Bob”和“Payment”是其他表的 ID,而不是实际名称。需要连接才能获取名称。

看起来“reference _ table _ name”是为了在正确的表中找到正确的名称,因为只存储了 reference _ id。如果我能以某种方式加入存储在 reference_table_name 中的表名,这可能会很好,如下所示:

select * from log l
join {{reference_table_name}} r on r.id = l.reference_id

我想我明白了他对这个表格布局的看法 - 使用 id 进行统计比将整个消息存储在一个列中(这需要文本解析)要好得多。现在我想知道..

是否有更好的方法或者是否有可能以某种方式进行虚假连接?

干杯

最佳答案

要获得基于建模的连接,您需要查看两个阶段的过程:

  1. 从 LOG 中获取特定消息的表名
  2. 通过将实际查询构造为字符串来使用动态 SQL。即:

    "SELECT l.* FROM LOG l JOIN "+ tableName +"r ON r.id = l.reference_id"

记录的删除没有太多值(value),因为没有记录可以加入以查看删除的内容。

应用程序需要多少历史记录?

您是否需要知道过去几个月/几年谁对某个值做了什么?如果需要记录,则应将其存档并从表中删除。如果您不需要所有历史记录,请考虑在每个表上使用以下审计列:

  • ENTRY_USERID,不为空
  • ENTRY_TIMESTAMP,日期,不为空
  • UPDATE_USERID,不为空
  • UPDATE_TIMESTAMP,日期,不为空

通过这些列,您可以了解记录的创建者和创建时间,以及上次成功更新记录的人员和时间。我会根据具体情况创建审计表,这取决于用户需要什么功能。

关于php - 更好的日志记录设计或一些 SQL 魔法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182740/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com