2010-08-30 39 views
7

Cách tốt nhất để tính số lượt xem trang cho các trang động như ví dụ url dưới đây là gì? Tôi đang sử dụng PHP và MySQL. Một lời giải thích ngắn gọn sẽ giúp ích cho bạn. Cảm ơn!PHP & MySQL cách tốt nhất để đếm số lượt xem trang cho các trang động

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

+3

'phương tiện localhost' "trên máy tính này".Tôi nghi ngờ rằng liên kết sẽ chỉ hoạt động trên máy tính của bạn, vì không ai khác có cùng mã :) – Piskvor

+1

Tôi sẽ thay đổi sau này khi trên một máy chủ thực 'http: // www.example.com /' lol :) – ddb

+0

ah , được. Nghĩ rằng có một cái gì đó tôi có thể nhìn thấy trên địa chỉ đó: D – Piskvor

Trả lời

10

Thông thường các cấu trúc bảng trông như thế này:

trang bảng:

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

bảng pages_views:

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

nơi pages_views có một chỉ số duy nhất trên page_id

Tuyên bố MySQL để tăng các quan điểm sau đó trông như sau:

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

Kể từ pages_views.page_id là duy nhất, hàng cho trang sẽ được tạo ra nếu nó không tồn tại; nếu nó tồn tại (đó là mệnh đề "duplicate key"), bộ đếm sẽ được tăng lên.

Tôi đã chọn hai bảng riêng biệt ở đây, vì trang CMS thường không được cập nhật quá thường xuyên (và do đó, tải của chúng chủ yếu là đọc), trong khi lượt xem trang được đọc và cập nhật, tốt, với mỗi lần xem trang.

+0

sẽ làm việc này nếu tôi sử dụng mod_rewrite? – ddb

+1

@ddb miễn là bạn có thể xác định các trang của mình. Trên thực tế mod_rewrite có rất ít việc phải làm với câu hỏi của bạn –

0

Chỉ cần tăng số nguyên trên bài đăng bạn hiện đang phân phối.

4

Vâng, bạn có thể chỉ cần thêm một lĩnh vực pageviews đến bảng trang của bạn và làm UPDATE pageviews = pageviews +1 WHERE id = 1 truy vấn trên mỗi tải trang

+0

Điều đó có hiệu quả. Tôi đề xuất một bảng riêng biệt, vì nội dung CMS không thay đổi thường xuyên (chủ yếu là đọc trên 'trang'), trong khi lượt xem thay đổi tất cả thời gian (đọc + ghi trên' pages_views'). – Piskvor

4

Vì mục đích thống kê xem theo ngày/tuần/tháng/năm, tôi đã thực hiện hai bảng. Lưu trữ đầu tiên tất cả các lượt truy cập vào trang web với trang và id của tôi được lưu trên cùng một hàng. Bảng thứ hai ghi lại các kiểm đếm, như Piskvor mô tả.

Lợi ích là tôi có thể xem thống kê cho bất kỳ trang và ID nào tôi muốn theo thời gian (nhưng sẽ có nhiều hàng theo thời gian ...) hoặc tôi có thể xem tổng số lần xem trang. Đối với khách truy cập trang web của tôi, tôi cung cấp thông tin từ bảng thứ hai này, nhưng bảng quản trị của tôi sử dụng đầy đủ bảng đầu tiên.

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 

Tôi không biết những gì bạn cần/muốn làm, hoặc thậm chí nếu cấu trúc bảng của tôi là tốt nhất, nhưng điều này làm việc cho tôi.

+0

Tuyệt. Tốt cho việc theo dõi các mẫu sử dụng cho mỗi người dùng. – Piskvor

3

Đây là mã của tôi và mã hoạt động bình thường khi tôi mở trang hoặc Khi tôi làm mới trang, lượt xem trang tăng thêm 1. Nếu page_id không tồn tại, nó sẽ chèn bản ghi với lượt xem = 1, nếu page_id tồn tại nó sẽ tăng quan điểm

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

với PDO bạn sẽ có một cái gì đó như thế này

$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)); 
Các vấn đề liên quan