Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Mostrar temas más populares en el último mes

Estas en el tema de Mostrar temas más populares en el último mes en el foro de Mysql en Foros del Web. Buenas, Tengo una consulta gracias a la cual puedo obtener los temas más comentados sobre un artículo: Código PHP: <?       $_MAS_POST  =  "" ; CONSULTA A LA BASE DE DATOS ...
  #1 (permalink)  
Antiguo 05/09/2011, 15:15
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Mostrar temas más populares en el último mes

Buenas,

Tengo una consulta gracias a la cual puedo obtener los temas más comentados sobre un artículo:

Código PHP:
<?      
$_MAS_POST 
"";
CONSULTA A LA BASE DE DATOS
$sql 
mysql_query("select id, count(id) total from comentarios group by id order by total desc limit 5");
while(
$row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["id"].'</b>'$rs["total"].'<br>';
}
echo 
$_MAS_POST;

?>
Con esta consulta me gustaría saber cómo puedo lograr que muestre los temas más comentados del último mes.

Lo estoy intentando con esto

Código PHP:
WHERE fecha LIKE '%". date("m", strtotime("-1 month")) ."%' 
Cada uno de los comentarios cuenta con el campo fecha, claro está. Lo intenté de diversas maneras como esta:

Código PHP:
$sql mysql_query("select fecha, id, count(id) total from comentarios group by id WHERE fecha LIKE '%"date("m"strtotime("-1 month")) ."%' order by total desc limit 5"); 
Llevo un par de horas dándole vueltas pero nada. ¿Alguien podría ayudarme? Muchas gracias desde ya
  #2 (permalink)  
Antiguo 06/09/2011, 01:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Mostrar temas más populares en el último mes

http://dev.mysql.com/doc/refman/5.5/...function_month

MONTH(fecha)=MONTH(Now())

Código MySQL:
Ver original
  1. select Year(fecha),
  2.           Month(fecha),
  3.           id,
  4.           count(*) total
  5. from comentarios
  6. group by Month(fecha),id
  7. HAVING Year(fecha)=Year(Now()) AND Month(fecha)=Month(Now())

para obtener los del mes actual, si substituyes Month(Now()) por una variable que te de el numero de otro mes te dará los de ese mes... lo mismo para el año...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 06/09/2011, 04:28
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

Muchísimas gracias por tu ayuda.

Con tu aporte compuse esto:

Código PHP:
<?      
$_MAS_POST 
"";
$sql mysql_query("SELECT YEAR(fecha), MONTH(fecha), id, count(*) total FROM comentarios GROUP BY MONTH(fecha),id HAVING YEAR(fecha)=YEAR(NOW()) AND MONTH(fecha)=MONTH(NOW()) ORDER BY total desc LIMIT 5");

while(
$row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["id"].'</b>'$rs["total"].'<br>';
}
echo 
$_MAS_POST;

?>
Pero no me funciona ¿Qué estoy haciendo mal?

Recapitulando:
id = es la identificación única de cada artículo. es decir, cuantas más veces se repita, su popularidad es mayor
fecha = fecha del comentario sobre el mencionado artículo

comentarios = tabla que contiene los comentarios.
  #4 (permalink)  
Antiguo 06/09/2011, 04:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Mostrar temas más populares en el último mes

Código MySQL:
Ver original
  1. SELECT YEAR(fecha),
  2.             MONTH(fecha),
  3.             id,
  4.             count(*) total
  5. FROM comentarios
  6. GROUP BY YEAR(fecha),  
  7.                  MONTH(fecha),
  8.                  id
  9. HAVING YEAR(fecha)=YEAR(NOW())
  10.              AND MONTH(fecha)=MONTH(NOW())

Te falta YEAR(fecha), en el group by....(linea 6)

He supuesto desde el principio que fecha tiene formato DATETIME
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 06/09/2011, 04:56
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

Muchas gracias de nuevo. Lo acabo de probar en plan rápido (me tengo que ir a comer) pero no funcionó. de todos mdoos a la vuelta le daré otra vez un par de vueltas :)

Por cierto, el campo fecha es de tipo "datetime". ¿está bien así para el fin que busco?

Muchas gracias de nuevo!
  #6 (permalink)  
Antiguo 06/09/2011, 04:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Mostrar temas más populares en el último mes

Si esta bien... si posteas el error quizas se te prodrá ayudar mas facilmente... por cierto no he mirado tu codigo php ....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 06/09/2011, 09:18
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

¿cómo puedo ver el fallo? (el navegador sólo me muestra el espacio sin resultados.

Tal vez esto sea demasiado complicado para mi :(


Código PHP:
<?      
$_MAS_POST 
"";
CONSULTA A LA BASE DE DATOS
$sql 
mysql_query("select id, count(id) total from comentarios group by id order by total desc limit 5");
while(
$row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["id"].'</b>'$rs["total"].'<br>';
}
echo 
$_MAS_POST;

?>
Con el código de arriba, ¿se podría hacer que, por ejemplo se contabilicen sólo los 100 últimos registros de "comentarios" para confeccionar la lista de los temas más populares (en vez de contabiliar todos los registros como hasta ahora)?.

Mil gracias de nuevo por tu ayuda :)
  #8 (permalink)  
Antiguo 06/09/2011, 10:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Mostrar temas más populares en el último mes

Lo suyo es limitar por fecha....

Para ver el error puedes lanzar la query directamente para ver si el error esta en el sql

Código MySQL:
Ver original
  1. SELECT YEAR(fecha),
  2.             MONTH(fecha),
  3.             id,
  4.             count(*) total
  5. FROM comentarios
  6. GROUP BY YEAR(fecha),  
  7.                  MONTH(fecha),
  8.                  id
  9. HAVING YEAR(fecha)=YEAR(NOW())
  10.              AND MONTH(fecha)=MONTH(NOW())

pegas esto en phpmydamin....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 06/09/2011, 11:07
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

Muy bien.

Lo acabo de hacer y me da este fallo "#1054 - Unknown column 'fecha' in 'having clause' "


Muchísimas gracias por tu ayuda :)
  #10 (permalink)  
Antiguo 06/09/2011, 12:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Mostrar temas más populares en el último mes

El campo fecha existe en la tabla ?

Si no existe no funcionará, esta claro no?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #11 (permalink)  
Antiguo 06/09/2011, 13:24
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

Sí claro

Cuyo tipo es "datetime"
  #12 (permalink)  
Antiguo 06/09/2011, 13:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar temas más populares en el último mes

Pues para MySQL, en la tabla "comentarios" no existe ningún campo llamado "fecha".
Si estás usando una base puesta en web, ten en cuenta que los servidores Linux son sensibles a mayúsculas, por lo que si el campo se llama "Fecha" o "FECHA" en lugar de "fecha", no lo reconocerá.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 06/09/2011, 13:59
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

El campo "fecha" está en minúsculas, sí.

¿El problema puede estar en HAVING YEAR(fecha)=YEAR(NOW()) ?
  #14 (permalink)  
Antiguo 06/09/2011, 16:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar temas más populares en el último mes

El problema está allí, según indica MySQL.
Pero ¿estás o no usando un servidor basado en Linux?

Postea la consulta tal y como la estás usando, sin cambiar lo que tienes en el script. Quisiera ver bien lo que estás poniendo. Y si es posible, postea el CREATE TABLE de esa tabla para confirmar algunos detalles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 07/09/2011, 09:39
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

no se si esto servirá, pero con esta consulta todo funciona:

Código PHP:
<?      
$_MAS_POST 
"";
CONSULTA A LA BASE DE DATOS
$sql 
mysql_query("select id, count(id) total from comentarios group by id order by total desc limit 5");
while(
$row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["id"].'</b>'$rs["total"].'<br>';
}
echo 
$_MAS_POST;

?>
Pero cuando pongo esta otra (para que muestre los más cometnados el último mes por ejemplo):

Código PHP:
<?      
$_MAS_POST 
"";
CONEXION BASE DE DATOS
$sql 
mysql_query("
SELECT YEAR(fecha), 
            MONTH(fecha), 
            id, 
            count(*) total 
FROM comentarios 
GROUP BY YEAR(fecha),   
                 MONTH(fecha),
                 id 
HAVING YEAR(fecha)=YEAR(NOW()) 
             AND MONTH(fecha)=MONTH(NOW()) 
ORDER BY total desc LIMIT 5
"
);
while(
$row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["id"].'</b>'$rs["total"].'<br>';
}
echo 
$_MAS_POST;

?>
Me sale el error anteriormente mencionado :(

¿Hay que configurar algo más sobre DATETIME aparte de otorgar a ese campo dicha propiedad? (algun juego de caracteres tal vez)?
  #16 (permalink)  
Antiguo 09/09/2011, 01:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Mostrar temas más populares en el último mes

Ejecuta la query directamente en el servidor ... (p.e. phpmyadmin) a ver si funciona.... y postea el create de comentarios
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #17 (permalink)  
Antiguo 09/09/2011, 05:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar temas más populares en el último mes

Cita:
Iniciado por David224 Ver Mensaje
¿Hay que configurar algo más sobre DATETIME aparte de otorgar a ese campo dicha propiedad? (algun juego de caracteres tal vez)?
¿Charset o collation? No. Las fechas no se guardan en realidad como caracteres sino como números de punto flotante, y los números (sin importar cuáles) se almacenan siempre como binarios.
Por eso un DATETIME ocupa nada más que 8 bytes, a pesar de que corresponde a un dato que se representa con 19 caracteres ("0000-00-00 00:00:00"). Es el sistema el que interpreta los atributos de ese tipo de dato y lo administra como DATETIME.

Yo sigo insistiendo en que me gustaría ver el CREATE TABLE de esa tabla.

De todos modos, hay un detalle que considerar: Ese HAVING en realidad contiene condiciones que deberían estar en el WHERE y no allí. el HAVING normalmente se usa para buscar una condición en especial, y no una que se aplique como filtro genérico.
Además, el comportamiento del HAVING en MySQL tiene algunas características que pueden estar generando errores casi imperceptibles (hay que revisar el manual cuidadosamente).

En cualquier caso, yo te propondría una sintaxis algo mejor, que posiblemente de resultado:
Código MySQL:
Ver original
  1. SELECT YEAR(fecha),
  2.             MONTH(fecha),
  3.             id,
  4.             count(*) total
  5. FROM comentarios
  6.              YEAR(fecha)=YEAR(NOW())
  7.              AND
  8.              MONTH(fecha)=MONTH(NOW())
  9. GROUP BY YEAR(fecha), MONTH(fecha), id
  10. ORDER BY total desc
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 09/09/2011 a las 05:58
  #18 (permalink)  
Antiguo 11/09/2011, 03:44
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

Sí. Ahora funcionó perfectamente :D

Muchísimas gracias. Efectivametne ese era el cambio necesario.

Un fuerte abrazo!
  #19 (permalink)  
Antiguo 11/09/2011, 13:19
 
Fecha de Ingreso: octubre-2003
Ubicación: Santander
Mensajes: 236
Antigüedad: 21 años, 1 mes
Puntos: 0
Respuesta: Mostrar temas más populares en el último mes

Sigo "enredando" con el script y me gustaría saber como mostrar los temas más populares en los (por ejemplo) 50 últimos comentarios

Código PHP:
<?      
$_MAS_POST 
"";
CONSULTA A LA BASE DE DATOS
$sql 
mysql_query("select id, count(id) total from comentarios group by id order by total desc limit 5");
while(
$row=mysql_fetch_array($sql,MYSQL_ASSOC)){
$_MAS_POST .= '<b>'.$row["id"].'</b>'$rs["total"].'<br>';
}
echo 
$_MAS_POST;

?>
¿Tal vez sería jugando con el varlo "total" por otro numérico? Muchas Gracias :)

Etiquetas: query, select, sql, temas
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




La zona horaria es GMT -6. Ahora son las 15:25.