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: 19 años, 9 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: 21 años, 4 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: 23 años, 3 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: 19 años, 9 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: 23 años, 3 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: 19 años, 9 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: 23 años, 3 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(0, 0, 0, $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: 20 años, 5 meses
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: 19 años, 9 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: 21 años, 9 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: 20 años, 5 meses
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: 19 años, 10 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: 21 años, 5 meses
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: 19 años, 9 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: 21 años, 9 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: 19 años, 9 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: 19 años, 9 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 13:44.