2010-08-30 15 views
7

Qual è il modo migliore per contare le visualizzazioni di pagina per pagine dinamiche come l'esempio di URL qui sotto? Sto usando PHP e MySQL. Una breve spiegazione potrebbe aiutare. Grazie!PHP e MySQL miglior modo per conteggiare le pagine viste per le pagine dinamiche

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

+3

'mezzi localhost' "su questo computer".Ho il sospetto che il collegamento funzionerà solo sul tuo computer, poiché nessun altro ha lo stesso codice :) – Piskvor

+1

Lo cambierò più tardi quando su un server reale 'http: // www.example.com /' lol :) – ddb

+0

ah , ok. Ho pensato che c'era qualcosa che potevo vedere su questo indirizzo: D – Piskvor

risposta

10

Di solito la struttura della tabella si presenta così:

pagine tavolo:

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

pages_views tavolo:

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

dove pages_views ha un indice univoco page_id

La dichiarazione MySQL per incrementare i punti di vista, allora si presenta come segue:

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

Dal pages_views.page_id è unico, la riga per la pagina otterrà creato se non esiste; se esiste (è la clausola "chiave duplicata"), il contatore verrà incrementato.

Qui ho scelto due tabelle separate, poiché le pagine CMS di solito non vengono aggiornate troppo spesso (e quindi il loro carico è per lo più letture), mentre le visualizzazioni di pagina vengono lette e aggiornate, bene, con ogni visualizzazione di pagina.

+0

funzionerebbe se uso mod_rewrite? – ddb

+1

@ddb finché è possibile identificare le pagine. In realtà mod_rewrite ha ben poco a che fare con la tua domanda –

0

Basta aumentare un numero intero nel post che si sta attualmente servendo.

4

Beh, si può semplicemente aggiungere un campo pageviews al vostro tavolo pagine e fare UPDATE pageviews = pageviews +1 WHERE id = 1 interrogazione in ogni pagina di carico

+0

Funziona, sì. Ho suggerito una tabella separata, poiché il contenuto CMS non cambia molto spesso (principalmente si legge su 'pages'), mentre le viste cambiano continuamente (legge + scrive su' pages_views'). – Piskvor

4

Per il bene delle statistiche di visualizzazione per giorno/settimana/mese/anno, ho fatto due tavoli. I primi archivi tutte le visite al sito con la mia pagina e il mio ID salvati sulla stessa riga. La seconda tabella registra tallys, come descrive Piskvor.

Il vantaggio è che posso visualizzare le statistiche per qualsiasi pagina e ID che voglio nel tempo (ma ci saranno un sacco di righe nel tempo ...) o posso semplicemente vedere le visualizzazioni di pagina totali. Per i visitatori del mio sito, fornisco informazioni da questa seconda tabella, ma il mio pannello di amministrazione sfrutta appieno la prima tabella.

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 

e

statsTotal 

- statTotalID 
- page 
- id 
- total 

Non so che cosa avete bisogno/vuole fare, o anche se la mia struttura della tabella è la cosa migliore, ma questo funziona per me.

+0

Nizza. Buono per il tracciamento dei modelli di utilizzo per utente. – Piskvor

3

Questo è il mio codice e funziona correttamente quando apro la pagina o Quando aggiorno la pagina, le visualizzazioni di pagina aumentano di 1. Se page_id non esiste, verrà inserito un record con views = 1, se page_id esiste questo valore viene aumentato il punto di vista

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

DOP si avrà qualcosa di simile

$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)); 
Problemi correlati