我正在为我网站上的个人资料创建一个“最近的事件”选项卡,我还将有一个日志供版主查看网站上发生的一切。这需要制作某种事件日志。
我只是不知道什么会更好。我有两个选择:
- 创建一个名为“activity”的表,然后每当有人做某事时,就在其中添加一条记录,其中包含操作类型、用户 ID、时间戳等。
- 问题:表格可能会变得很长。
- 加入所有 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.user
和q.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/