在我的应用程序中,我有两个表:一个用于跟踪记录,另一个用于跟踪某些页面上的个人综合浏览量。每个页面视图事件都会触发一条记录写入我的Views表。
为了计算统计数据,我有一个cron作业,我试图聚合这些视图的计数,按记录ID分组并将它们保存到一个单独的表中。
如果我运行以下插入查询,则效果很好。
insert into Details (record_id, views)
(select record_id, count(id) from Views where 1 group by record_id)
不幸的是,这仅适用于插入,而且我很难对插入/更新提出正确的查询。我已尝试使用On Duplicate Key Update
,但我似乎无法弄清楚如何使用现有查询。我希望避免替代方案,如果可能的话,wihch会在PHP中编写脚本并运行一堆单独的查询。
以下是我的表格定义:
Views
id (int) PK
record_id (int)
created_at (date)
Details
record_id (int) PK
views (int)
注意:此外,我将来计划在Details表中添加更多列来表示其他统计信息,因此运行Truncate并重新运行上面的原始插入查询并不是一个可行的解决方案。
答案 0 :(得分:2)
只需将其添加到最后:
insert into Details (record_id, views)
(select record_id, count(id) from Views group by record_id)
on duplicate key update views = values(views);
为了实现这一点,record_id
必须是唯一的。