2010-08-30 7 views
7

नीचे यूआरएल उदाहरण जैसे गतिशील पृष्ठों के लिए पृष्ठ दृश्यों को गिनने का सबसे अच्छा तरीका क्या है? मैं PHP और MySQL का उपयोग कर रहा हूँ। एक संक्षिप्त स्पष्टीकरण मदद करेगा। धन्यवाद!डायनामिक पृष्ठों के लिए पृष्ठ दृश्यों की गणना करने के लिए PHP और MySQL सर्वोत्तम तरीका

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

+3

'localhost' साधन की तरह कुछ करना होगा।मुझे संदेह है कि यह लिंक केवल आपके कंप्यूटर पर काम करेगा, क्योंकि किसी और के पास एक ही कोड नहीं है :) – Piskvor

+1

मैं इसे बाद में एक वास्तविक सर्वर पर http: // www.example.com/'lol :) – ddb

+0

आह पर बदल दूंगा , ठीक। सोचा था कि उस पते पर मैं कुछ देख सकता था: डी – Piskvor

उत्तर

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 के बाद से अद्वितीय है, पृष्ठ के लिए पंक्ति अगर यह मौजूद नहीं है बनाया जाएगा; यदि यह मौजूद है (वह "डुप्लिकेट कुंजी" खंड है), काउंटर बढ़ाया जाएगा।

मैंने यहां दो अलग-अलग टेबल चुने हैं, क्योंकि सीएमएस पेज आमतौर पर अक्सर अपडेट नहीं होते हैं (और इसलिए, उनका भार अधिकतर पढ़ता है), जबकि पृष्ठ दृश्य प्रत्येक पृष्ठ दृश्य के साथ पढ़ और अद्यतन होते हैं।

+0

यदि मैं mod_rewrite का उपयोग करता हूं तो यह काम करेगा? – ddb

+1

@ddb जब तक आप अपने पृष्ठों की पहचान कर सकें। असल में mod_rewrite आपके प्रश्न –

0

बस उस पोस्ट पर एक पूर्णांक बढ़ाएं जो आप वर्तमान में सेवा करते हैं।

4

ठीक है, तो आप बस अपने पृष्ठों मेज पर एक क्षेत्र pageviews जोड़ने और प्रत्येक पृष्ठ लोड

+0

के साथ बहुत कम करना है जो काम करता है, हां। मैंने एक अलग टेबल का सुझाव दिया, क्योंकि सीएमएस सामग्री अक्सर बदलती नहीं है (ज्यादातर 'पृष्ठों' पर पढ़ती है), जबकि विचार हर समय बदलते हैं (पढ़ता है + पृष्ठों_दृश्यों पर लिखता है)। – Piskvor

4

में पाया जा सकता दिन से देखे जाने के आंकड़ों की खातिर पर UPDATE pageviews = pageviews +1 WHERE id = 1 क्वेरी कर सकते हैं/सप्ताह/महीना/वर्ष, मैंने दो टेबल बनाए हैं। पहले संग्रह सभी साइट पर मेरे पृष्ठ और आईडी के साथ उसी पंक्ति पर सहेजे गए हैं। दूसरी तालिका में टैलिस रिकॉर्ड होते हैं, जैसे कि पिस्कवोर वर्णन करता है।

लाभ यह है कि मैं समय के साथ किसी भी पेज और आईडी के आंकड़े देख सकता हूं (लेकिन समय के साथ बहुत सारी पंक्तियां होंगी ...) या मैं केवल कुल पृष्ठदृश्य देख सकता हूं। मेरी साइट के आगंतुकों के लिए, मैं इस दूसरी तालिका से जानकारी प्रदान करता हूं, लेकिन मेरा व्यवस्थापक पैनल पहली तालिका का पूरा उपयोग करता है।

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

3

यह मेरा कोड है और जब मैं पृष्ठ खोलता हूं या जब मैं पृष्ठ को रीफ्रेश करता हूं तो यह ठीक से काम कर रहा है, पृष्ठ दृश्य 1 से बढ़ रहा है। यदि पृष्ठ_आईडी मौजूद नहीं है तो यह पृष्ठ = आईडी के साथ दृश्य = 1 के साथ एक रिकॉर्ड डालेगा मौजूद है यह देखा गया

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

पीडीओ के साथ बढ़ेगी, जब आप "इस कंप्यूटर पर" इस ​​

$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)); 
संबंधित मुद्दे