2010-08-30 48 views
7

什麼是最好的方式來計算動態頁面的頁面瀏覽量,如下面的url例子?我使用PHP和MySQL。簡單的解釋會有所幫助。謝謝!PHP和MySQL最好的方式來計算動態頁面的頁面瀏覽量

http://www.example.com/posts/post.php?id=3

+3

'localhost'手段。我懷疑這個鏈接只能在你的電腦上運行,因爲其他人沒有相同的代碼:) – Piskvor 2010-08-30 09:55:13

+1

當我在一個真實的服務器上'http:// www.example.com /'lol :)時,我會改變它 – ddb 2010-08-30 09:56:48

+0

啊, 好。以爲有什麼我可以看到的地址:D – Piskvor 2010-08-30 10:50:00

回答

10

通常表的結構是這樣的:

表頁:

id | name   | ... 
========================== 
1 Some Page 
2 Some Other Page 

表pages_views:

page_id | views 
================ 
1   1234 
2   80 

其中pages_views對page_id

唯一索引

MySQL的語句遞增然後查找的看法如下:

INSERT INTO `pages_views` SET views=1 WHERE page_id=? 
    ON DUPLICATE KEY UPDATE views=views+1 ; 

由於pages_views.page_id是獨一無二的,頁面的行會得到,如果不存在,則創建;如果它存在(這是「重複密鑰」子句),則計數器將遞增。

我在這裏選擇了兩個單獨的表格,因爲CMS頁面通常不會經常更新(因此,它們的加載大部分是讀取),而頁面視圖會在每個頁面視圖中讀取和更新。

+0

這個工作,如果我使用mod_rewrite? – ddb 2010-08-30 10:01:32

+1

@ddb只要你能識別你的頁面。其實mod_rewrite與你的問題很少有關係 – 2010-08-30 10:02:54

0

只需在您當前投放的帖子上增加一個整數。

4

好了,你可以在現場pageviews只需添加到您的網頁表,並在每個頁面加載

+0

這很有效,是的。我提出了一個單獨的表格,因爲CMS內容不會經常改變(主要讀取「頁面」),而視圖始終改變(讀取和寫入'pages_views')。 – Piskvor 2010-08-30 10:47:36

4

找到要查看統計資料的一天着想做UPDATE pageviews = pageviews +1 WHERE id = 1查詢/周/月/年,我做了兩張表。第一個檔案全部訪問該網站,我的頁面和ID保存在同一行。第二個表格記錄了理貨,比如Piskvor描述的。

好處是,我可以隨時查看任何頁面和ID的統計信息(但隨着時間的推移,這將會是很多行......),或者我可以簡單地查看總頁面瀏覽量。對於我網站的訪問者,我從第二張表中獲取信息,但我的管理面板充分利用了第一張表。

statsEach 

- statID 
- page (example: page 100 is index.php, or 210 is news.php) 
- id (example: 1 is news story 1, 2 is news story 2,...) 
- date 
- time 
- user 

statsTotal 

- statTotalID 
- page 
- id 
- total 

我不知道你需要/想這樣做,否則即使我的表結構是最好的,但是這對我的作品是什麼。

+0

不錯。適用於跟蹤每個用戶的使用模式。 – Piskvor 2010-08-30 10:48:51

3

這是我的代碼,它在我打開頁面時正常工作,或者當我刷新頁面時,頁面視圖遞增1.如果page_id不存在,它將插入一個記錄,視圖= 1,如果page_id存在,則增加的觀點

`INSERT INTO pages_views (pages_id, views) VALUES ($page_id, 1) ON DUPLICATE KEY UPDATE views=views+1` 

隨着PDO你將不得不像「在此計算機上」這個

$sql = "INSERT INTO pages_views (pages_id, views) VALUES (:pageId, 1) ON DUPLICATE KEY UPDATE views=views+1"; 

$q = $conn->prepare($sql); 
$q->execute(array(':pageId'=>$pageId));