使用另一个查询的结果插入/更新到表中

时间:2012-10-29 20:42:24

标签: mysql

在我的应用程序中,我有两个表:一个用于跟踪记录,另一个用于跟踪某些页面上的个人综合浏览量。每个页面视图事件都会触发一条记录写入我的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并重新运行上面的原始插入查询并不是一个可行的解决方案。

1 个答案:

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