2012-10-29 97 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