gpt4 book ai didi

php - 制作事件日志的最有效方法

转载 作者:可可西里 更新时间:2023-11-01 06:50:18 26 4
gpt4 key购买 nike

我正在为我网站上的个人资料创建一个“最近的事件”选项卡,我还将有一个日志供版主查看网站上发生的一切。这需要制作某种事件日志。

我只是不知道什么会更好。我有两个选择:

  1. 创建一个名为“activity”的表,然后每当有人做某事时,就在其中添加一条记录,其中包含操作类型、用户 ID、时间戳等。
    • 问题:表格可能会变得很长。
  2. 加入所有 3 个表格(问题、答案、answer_comments),然后以某种方式按照执行操作的顺序在页面上显示所有这些。
    • 问题:这将非常困难,因为我不知道如何通过加入 3表格。

有人知道在这种情况下制作事件日志的更好方法吗?我正在使用 PHP 和 MySQL。如果这太低效或太难,我可能会忘记个人资料上的“最近事件”选项卡,但我仍然需要版主的事件日志。

这是我开始为选项 2 制作的一些 SQL,但这行不通,因为当我在 while 循环:

SELECT q.*, a.*, ac.* 
FROM questions q JOIN answers a ON a.questionid = q.qid
JOIN answer_comments ac ON c.answerid = a.ans_id
WHERE q.user = $userid
AND a.userid = $userid
AND ac.userid = $userid
ORDER BY q.created DESC, a.created DESC, ac.created DESC

在此先感谢您的帮助!

最佳答案

为什么会有q.userq.userid

对于选项 2(更好的选项 IMO - 只要您已正确编制索引),我认为 UNION 更符合您的需求。像这样:

SELECT 'question' AS action, id, created 
FROM questions WHERE userid = {$userid}
UNION
SELECT 'answer' AS action, id, created
FROM answers WHERE userid = {$userid}
UNION
SELECT 'comment' AS action, id, created
FROM answer_comments WHERE userid = {$userid}
ORDER BY created DESC LIMIT 20

'question'/'answer'/'comment' 告诉您采取了哪项操作。您可能遇到的问题:作为一个 UNION,每个 SELECT 语句必须具有相同的列数,因此如果一个很短,您可以只添加一个 NULL 例如:

SELECT 'comment', id, created, NULL FROM ac

此外,如果其中一个created 列具有不同的名称,您可以使用别名

SELECT 'comment', id, comment_date AS created FROM ac

关于php - 制作事件日志的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129503/

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