2012-10-29 52 views
1

在我的应用程序的结果,我有两个表:一个用于跟踪记录,而另一种,我在某些网页上跟踪单个浏览量。每个页面视图事件触发一条记录写入我的Views表。插入/更新到表与另一个查询

为了计算统计数据,我有哪里我试图汇总这些意见,由RECORD_ID分组计数,并将它们保存到一个单独的表中的cron作业。

如果我运行下面的INSERT查询,它的伟大工程。

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) 

注:此外,在未来,我打算增加更多的列的详细信息表来代表其他的统计数据,所以运行截断并重新 - 运行上面的原始插入查询并不是一个真正可行的解决方案。

+0

如何从摘要中删除record_id作为步骤1 - 然后重新运行插入? – Randy

+0

这是可能的,但是计划是在细节表中添加更多的列来表示其他汇总统计数据...这就是为什么我要插入数据,如果可能的话 – nageeb

回答

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

+0

完美地工作。我的问题是查询中的“更新视图=值(视图)”部分。谢谢! – nageeb