1

在我的应用程序中,我有两个表:一个用于跟踪记录,另一个用于跟踪某些页面上的单个页面浏览量。每个页面查看事件都会触发一条记录写入我的 Views 表。

为了计算统计数据,我有一个 cron 作业,我试图聚合这些视图的计数,按 record_id 分组并将它们保存到单独的表中。

如果我运行以下插入查询,效果很好。

insert into Details (record_id, views)
(select record_id, count(id) from Views where 1 group by record_id)

不幸的是,这仅适用于插入,而且我很难提出正确的插入/更新查询。我试过使用On Duplicate Key Update,但我似乎无法弄清楚如何让它与我现有的查询一起工作。我希望避免替代方案,如果可能的话,我会在 PHP 中编写脚本并运行一堆单独的查询。

这是我的表定义:

Views
id (int) PK
record_id (int)
created_at (date)

Details
record_id (int) PK
views (int)

注意:另外,在未来,我计划在 Details 表中添加更多列来表示其他统计信息,因此运行 Truncate 并重新运行上面的原始插入查询并不是真正可行的解决方案。

4

1 回答 1

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必须是唯一的。

于 2012-10-29T21:30:11.287 回答