Foros del Web » Programando para Internet » PHP »

Como hacer un top semanal? (Los mas vistos en una semana)

Estas en el tema de Como hacer un top semanal? (Los mas vistos en una semana) en el foro de PHP en Foros del Web. Hola a todos. Alguien sabría aconsejarme los pasos que debo seguir para crear un top semanal de las noticias más vistas esa semana? Es decir, ...
  #1 (permalink)  
Antiguo 20/10/2007, 08:29
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Como hacer un top semanal? (Los mas vistos en una semana)

Hola a todos.

Alguien sabría aconsejarme los pasos que debo seguir para crear un top semanal de las noticias más vistas esa semana?

Es decir, el top mostrará las noticias más vistas solo esa semana. A la semana siguiente, se resetea y cuenta los más vistos de esa nueva semana.

A ver si alguien me puede ayudar.

Los datos de mi tabla mysql serían los siguientes:

`id`
`titulo`
`hits`
`fecha`

Un saludo
  #2 (permalink)  
Antiguo 20/10/2007, 08:50
Avatar de jorgedx  
Fecha de Ingreso: junio-2005
Ubicación: Chile, Los Andes
Mensajes: 406
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Hola Cero_byte cuentas el acceso a cada noticias lo guardas en la bd en tu campo hits, y luego solo haces un select

Código PHP:
SELECT FROM noticias order by hits limit $cantidad_de_noticias 
Saludos
__________________
Nuevamente a las pistas ...
  #3 (permalink)  
Antiguo 20/10/2007, 09:23
Usuario no validado
 
Fecha de Ingreso: julio-2003
Ubicación: <?="www.tuky.cl";?>
Mensajes: 132
Antigüedad: 20 años, 9 meses
Puntos: 4
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Yo haría lo siguiente:

Crear dos tablas en mysql

noticias ->
`id`
`titulo`

hits ->
`id_noticia`
`views`
`fecha`

En la tabla hits alamcenarias el id de la noticia, contabilizas las visualizaciones de la noticia y en fecha guardas la semana y el año actual.

Se me ocurre algo así.

Registrar visualizaciones
Código PHP:
<?php

    $id_noticia 
$_GET['id'];
    
$semana_actual date("W-Y"); // Entrega la semana actual del año, ej: 42-2007 (la 42va semana del año 2007)

    
$sql "SELECT id_noticia FROM hits WHERE id_noticia = $id_noticia AND fecha = '$semana_actual'";
    
$result mysql_query($sql$conexion);
    if (
mysql_num_rows($result) > 0)
    {
        
$sql_new "UPDATE hits SET views = views + 1 WHERE id_noticia = $id_noticia AND fecha = '$semana_actual'";
    }
    else
    {
        
$sql_new "INSERT INTO hits VALUES ($id_noticia, 1, '$semana_actual')";
    }
    
    
mysql_free_result($result);
    
mysql_query($sql_new$conexion);
    
?>
Seleccionar 10 mas vistas de la semana actual
Código PHP:
<?php

    $semana_actual 
date("W-Y"); // Entrega la semana actual del año, ej: 42-2007 (la 42va semana del año 2007)

    
$sql "SELECT id_noticia, views FROM hits WHERE fecha = '$semana_actual' ORDER BY views DESC LIMIT 0, 10";
    
$result mysql_query($sql$conexion);
    while(
$r mysql_fetch_assoc($result))
    {
        echo 
$r['id_noticia'];
    }
    
    
mysql_free_result($result);
        
?>
Esa es la idea, habría que afinarla un poco

saludos,

tuky.-
  #4 (permalink)  
Antiguo 21/10/2007, 07:29
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Gracias jorgedx pero me gusta más la idea de tuky ya que este hace el top de cada semana.

Intento hacer algo asi, ya que solo dispongo de una tabla en la base de datos.

Código PHP:
function top_semanal()
{
    
$semana_actual date("W-y"); // Entrega la semana actual del año, ej: 42-2007 (la 42va semana del año 2007)
    
    
$sql "SELECT *,date_format(fecha,'W-y') as fecha FROM noticias WHERE fecha='$semana_actual' ORDER by hits";
    
$resultado mysql_query($sql) or die("Error al conectar con la base de datos"); 
    echo 
$semana_actual;
    while (
$fila=mysql_fetch_object($resultado))
    { 
        
$fecha1 date("W-y"$fila->fecha);
        echo 
$fecha1;
    }


Llevo porbando cosas asi durante un buen rato, pero no condigo que funcione.

La idea sería que mostrase los resultados ordenados por "hits" (visitas) pero siempre y cuando la fecha sea igual a la semana actual de año.

Pero no me funciona.

Alguien me echa otra manita?

Gracias!
  #5 (permalink)  
Antiguo 21/10/2007, 08:47
Usuario no validado
 
Fecha de Ingreso: julio-2003
Ubicación: <?="www.tuky.cl";?>
Mensajes: 132
Antigüedad: 20 años, 9 meses
Puntos: 4
De acuerdo Re: Como hacer un top semanal? (Los mas vistos en una semana)

Si solo dispones de una tabla, se me ocurren estos cambios:

Contabilizamos los hits
Código PHP:
 <?php

    $id_noticia 
$_GET['id'];
    
$titulo_noticia $_GET['titulo'];

    
$semana_actual date("W-Y"); // Entrega la semana actual del año, ej: 42-2007 (la 42va semana del año 2007)

    
$sql "SELECT id FROM noticias WHERE id = $id_noticia AND fecha = '$semana_actual'";
    
$result mysql_query($sql$conexion);
    if (
mysql_num_rows($result) > 0)
    {
        
$sql_new "UPDATE noticias SET hits = hits + 1 WHERE id = $id_noticia AND fecha = '$semana_actual'";
    }
    else
    {
        
$sql_new "INSERT INTO noticias VALUES ($id_noticia, $titulo_noticia, 1, '$semana_actual')";
    }
    
    
mysql_free_result($result);
    
mysql_query($sql_new$conexion);
    
?>
Mostramos el top
Código PHP:
 <?php

    $semana_actual 
date("W-Y"); // Entrega la semana actual del año, ej: 42-2007 (la 42va semana del año 2007)
    
$numero_noticias 10;

    
$sql "SELECT id, titulo, hits FROM noticias WHERE fecha = '$semana_actual' ORDER BY hits DESC LIMIT 0, $numero_noticias";
    
$result mysql_query($sql$conexion);
    while(
$r mysql_fetch_assoc($result))
    {
        echo 
$r['titulo'];
    }
    
    
mysql_free_result($result);
        
?>
saludos!!
  #6 (permalink)  
Antiguo 21/10/2007, 15:20
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Como hacer un top semanal? (Los mas vistos en una semana)

No entiendo el porque pero no consigo hacer que funcione...

A ver, mi sistema guarda la fecha en la base de datos del siguiente modo: 21/10/07

Para obtener la semana de una fecha como la de antes se hace asi no?

echo date("W/y", "21/10/07");

No se en que puede fallar, pero desde luego algo no me funciona bien ya que no muestra ningun resultado.

Un saludo. A ver si me puedes echar otra mano! ;) gracias
  #7 (permalink)  
Antiguo 21/10/2007, 15:42
Usuario no validado
 
Fecha de Ingreso: julio-2003
Ubicación: <?="www.tuky.cl";?>
Mensajes: 132
Antigüedad: 20 años, 9 meses
Puntos: 4
Re: Como hacer un top semanal? (Los mas vistos en una semana)

para ocupar lo que dices...

Código PHP:
<?php
     
echo date("W/Y""21/10/07");
?>
debes convertir la fecha a segundos con mktime... es decir

Código PHP:
<?php
    $fecha 
"21/10/07";
    list(
$dia$mes$ano) = explode("/"$fecha);
    echo 
date("W/Y"mktime(000$mes$dia$ano));
?>
  #8 (permalink)  
Antiguo 21/10/2007, 19:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Puedes hacerlo directo via SQL si le pasas los parametros correctos.
Código PHP:
$fecha date("W");
$sql "SELECT * FROM `noticias` WHERE WEEK(`fecha`) = $fecha"
Saludos.
  #9 (permalink)  
Antiguo 22/10/2007, 04:39
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Como hacer un top semanal? (Los mas vistos en una semana)

A ver, hay algo que me falla, ya que no consigo hacer que funcione. No muestra ningun resultado y creo que el problema podría estar en el $sql.

La función que intento crear es la siguiente:

Código PHP:
function top_semanal()
{
    
$fecha date("W");
    
$sql "SELECT * FROM noticias WHERE WEEK(fecha) = $fecha AND aprobado=1"
    
$result mysql_query($sql) or die("Error"); 

    while(
$fila mysql_fetch_object($result))
    {
        echo 
$fila->titulo;
    }

Pero no consigo que muestre ningún título por lo que creo que la llamada a la base de datos con el $sql no la hago bien.

Como dije, las fechas se me guardan en la base de datos del siguiente modo: dd/mm/yy (22/10/07)

No entiendo donde puede estar el error. Pero me da a mi que va a estar a la hora de comparar el numero de semana del año con la fecha que yo almaceno en la base de datos.

Alguien me puede dar una solucion?

Le doy vueltas y vueltas al tema pero no consigo hacerlo funcionar. Gracias
  #10 (permalink)  
Antiguo 22/10/2007, 05:00
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Hola,

prueba de sacarte por pantalla la sentencia SQL con un simple echo
Código PHP:
$fecha date("W");
$sql "SELECT * FROM `noticias` WHERE WEEK(`fecha`) = $fecha";
echo 
$sql
y luego para saber si tienes un error de SQL y poder detectarlo añade el mysql_error
Código PHP:
$result mysql_query($sql) or die("Error SQL: ".mysql_error()); 
a ver si asi aislas el problema!!!

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #11 (permalink)  
Antiguo 22/10/2007, 09:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Tambien verifica en tu administrador de bases de datos, ejecuta la consulta directamente y checa si te da los resultados esperados.

Saludos.
  #12 (permalink)  
Antiguo 22/10/2007, 12:51
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 225
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: Como hacer un top semanal? (Los mas vistos en una semana)

estoy con tuky me parece la mejor forma
  #13 (permalink)  
Antiguo 22/10/2007, 13:56
Avatar de deet  
Fecha de Ingreso: mayo-2005
Ubicación: Córdoba - Argentina
Mensajes: 269
Antigüedad: 19 años
Puntos: 1
Re: Como hacer un top semanal? (Los mas vistos en una semana)

hola,

creo que lo mejor es buscar por un rango de fecha específico ya que por ejemplo, si le decimos que tome las noticias de la semana 42, también buscará las de años anteriores lo cual es incorrecto.

yo me inclino más por lo siguiente:

Código PHP:
<?
//fecha de hace una semana
$una_semana time() - (60*60*24*7);
$fecha date("Y-m-d",$una_semana);

$sql "SELECT * FROM tabla WHERE fecha BETWEEN '$fecha' AND now() ORDER BY hits DESC LIMIT 0,10";

?>
  #14 (permalink)  
Antiguo 22/10/2007, 15:30
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Bien! Por fin consigo mostrar resultados de la base de datos!

Utilizo el metodo que me ha dicho deet, pero exactamente que hace?
Muestra los resultado ordenados por hits de la ultima semana no? Es decir, fecha comprendida entre la de hace una semana y la de hoy no?

Código que uso:

Código PHP:
function top_semanal()
{
//fecha de hace una semana 
$una_semana time() - (60*60*24*7); 
$fecha date("d/m/y",$una_semana); 

$sql "SELECT * FROM noticias WHERE fecha BETWEEN '$fecha' AND now() AND aprobado = 1 ORDER BY id DESC"
    
$resultado mysql_query($sql) or die("Error al conectar con la base de datos"); 

    while(
$fila mysql_fetch_object($resultado))
    {
        echo 
$fila->id;
        echo 
"<br>";
    }

El now() me muestra la fecha en el formato dd/mm/yyyy no? deberia conseguir hacer que me la mostrase en el siguiente formato dd/mm/yy creo...

Última edición por CeRo_ByTe; 22/10/2007 a las 15:49
  #15 (permalink)  
Antiguo 23/10/2007, 00:31
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 19 años, 3 meses
Puntos: 10
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Hola,
solo es un comentario: no seria todo mas facil si añades un campo semana y un campo año en tu BD?
Asi las consultas serian mucho más rapido y te ahorrarias cosas como estas...

Saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #16 (permalink)  
Antiguo 23/10/2007, 05:54
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Ok sergi_climent, probaré lo que me dices y veré si tengo alguna duda para postearla aquí.

gracias por vuestra ayuda compañeros.
  #17 (permalink)  
Antiguo 23/10/2007, 08:15
 
Fecha de Ingreso: enero-2007
Mensajes: 158
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Como hacer un top semanal? (Los mas vistos en una semana)

Después de un buen rato haciendo pruebas, ya he resuelto el problema que tenia. Se trataba de un error en la fecha. Las fechas comprendidas (BETWEEN) no eran del mismo formato por lo que no mostraba resultados coherentes.

Lo he resuleto modificando el now() por una variable que almacena la fecha actual del siguiente modo:

Código PHP:
$fecha_actual date("d/m/y"); 
Gracias a todos por ayudarme.

He aprendido bastante en cuanto a "fechas" de mysql y php.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:04.