2010-08-30 17 views
7

¿Cuál es la mejor manera de contar páginas vistas para páginas dinámicas como el ejemplo de url a continuación? Estoy usando PHP y MySQL. Una breve explicación ayudaría. ¡Gracias!PHP y MySQL la mejor manera de contar páginas vistas para páginas dinámicas

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

+3

'medios localhost' "en este equipo".Sospecho que el enlace solo funcionará en tu computadora, ya que nadie más tiene el mismo código :) – Piskvor

+1

Lo cambiaré más adelante cuando esté en un servidor real 'http: // www.example.com /' lol :) – ddb

+0

ah , Okay. Pensé que había algo que podría ver en esa dirección: D – Piskvor

Respuesta

10

Por lo general, la estructura de la tabla es similar a esto:

páginas de la tabla:

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

pages_views mesa:

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

donde pages_views tiene un índice único en page_id

La declaración de MySQL para incrementar los puntos de vista a continuación, es el siguiente:

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

Desde pages_views.page_id es único, la fila de la página será creado si no existe; si existe (esa es la cláusula de "clave duplicada"), el contador se incrementará.

Elegí dos tablas separadas aquí, ya que las páginas CMS generalmente no se actualizan demasiado a menudo (y por lo tanto, su carga es mayormente lecturas), mientras que las páginas se leen y actualizan, bueno, con cada vista de página.

+0

¿funcionaría esto si utilizo mod_rewrite? – ddb

+1

@ddb siempre que pueda identificar sus páginas. En realidad, mod_rewrite tiene muy poco que ver con tu pregunta –

0

Simplemente aumente un número entero en la publicación que actualmente sirve.

4

Bueno, simplemente puede añadir un campo pageviews a su mesa páginas y hacer UPDATE pageviews = pageviews +1 WHERE id = 1 consulta en cada carga de página

+0

Eso funciona, sí. Sugerí una tabla separada, ya que el contenido de CMS no cambia tan a menudo (la mayoría lee en 'páginas'), mientras que las vistas cambian todo el tiempo (lee + escribe en' pages_views'). – Piskvor

4

Por el bien de las estadísticas de visualización de día/semana/mes/año, hice dos tablas. El primero archiva todas las visitas al sitio con mi página y mi ID guardados en la misma fila. La segunda tabla registra tallys, como describe Piskvor.

La ventaja es que puedo ver las estadísticas de cualquier página e ID que desee con el tiempo (pero serán muchas las filas en el tiempo ...) o simplemente puedo ver las páginas vistas totales. Para los visitantes de mi sitio, sirvo información de esta segunda tabla, pero mi panel de administración hace un uso completo de la primera tabla.

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 

y

statsTotal 

- statTotalID 
- page 
- id 
- total 

No sé lo que necesita/quiere hacer, o incluso si mi estructura de la tabla es la mejor, pero esto funciona para mí.

+0

Agradable. Bueno para rastrear patrones de uso por usuario. – Piskvor

3

Este es mi código y está funcionando correctamente cuando abro la página o cuando actualizo la página, las vistas de página se incrementan en 1. Si el page_id no existe, insertará un registro con views = 1, si page_id existe éste aumentará los puntos de vista

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

con DOP va a tener algo como esto

$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)); 
Cuestiones relacionadas