2012-07-13 52 views
1

我正在創建一個jsp頁面,其中顯示了一個新聞項目,就像這個StackOverflow頁面上的單個問題一樣。我需要將查看計數存儲在數據庫中。管理查看網頁計數

我可以簡單地增加在數據庫中的查看次數是這樣的:

`UPDATE table SET views=views+1 WHERE newsId=4458;` 

但是,如果一個用戶再打該網頁,一遍又一遍,說50倍......在這種情況下,我查看次數不代表該網站的唯一訪問者。我怎樣才能避免這種情況?

我想要類似StackOverflow的查看計數系統。

+1

可能會在會話中保留一個變量,以確保訪問數據庫中已更新或未更新。會話是特定於用戶/瀏覽器的,因此會同步。 – kosa 2012-07-13 21:01:02

回答

0

以及一個解決方案可能是你犯了一個新表(可以說其稱爲視圖)有以下的列'viewid「NewSID的」 'ipaddress'(顯然newsid是外鍵) 每次有人訪問你的網站時,你都要檢查他的IP是否已經在該表中。

Select count(*) AS count FROM views WHERE newsid=1234 AND ipaddress=123.456.125 

如果計數等於0插入這樣

INSERT INTO views('newsid', 'ipaddress') VALUES(1234, 123.146.125) 

現在,當您想獲取的觀看次數:

Select count(*) AS count FROM views WHERE newsid=1234 

您可以通過添加名爲「計數」的另一列加強這方面的和「lastviewed」(鍵入datetime)到表視圖。 比方說,如果一天不匹配,則允許每個ip被另一次計數。 這樣你會得到一個相當準確的觀看次數:)

,以獲取新的觀看次數,你可以簡單地使用SUM

Select SUM(count) AS count WHERE newsid=1234 

祝你好運:)

0

我說在Javscript中使用計數器。增加body onclick上的變量。例如:

<script language=」javascript」> 
function pageCounter() 
{ 
var counter = 0; 
counter = counter++; 

} 
</script> 

<body onclick = 「pageCounter()」> 

,你可以更新的OnClose值..

0

您可能要參考spencer7593的回答here,爲了分析的目的,他基本上建議同時擁有(1)查看計數列和快速生成網頁以及(2)單獨的查看錶,用於記錄與每個查看相關的用戶ID和時間戳。

我建議這個視圖表也可以用來查詢在確定視圖計數列是否應該增加時,是否在最後一天(或一週)內查看特定用戶是否有特定內容。通過檢查某個項目的視圖是否僅在最後一天(或一週)內發生過,DB查詢應該大幅降低成本,同時仍能保護視圖計數的完整性。