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

Seleccionar noticias más próximas en el tiempo

Estas en el tema de Seleccionar noticias más próximas en el tiempo en el foro de Mysql en Foros del Web. Hola tengo una web en la que se introducen una serie de noticias, las cuales llevan una fecha. En la página principal solo se muestran ...
  #1 (permalink)  
Antiguo 02/05/2013, 11:34
 
Fecha de Ingreso: mayo-2010
Mensajes: 103
Antigüedad: 13 años, 11 meses
Puntos: 4
Seleccionar noticias más próximas en el tiempo

Hola tengo una web en la que se introducen una serie de noticias, las cuales llevan una fecha. En la página principal solo se muestran las 2 últimas según esta fecha, pero ahora me piden si se pueden mostrar las 2 más próximas en el tiempo, es decir, si tengo noticias con fecha de junio y de septiembre, tal como está ahora se mostrarán las de septiembre, pero desearían que se mostraran las de junio, y la verdad no se como armar la consulta sql para lograr esto, alguien me da una idea de como podría hacerse, si es que esto es posible.
__________________
salud
ainvar de los carnutos
  #2 (permalink)  
Antiguo 02/05/2013, 11:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Seleccionar noticias más próximas en el tiempo

Muestra la consulta que harías y veremos.
En principio, hay varias funciones de fecha que puedes usar en MySQL, pero necesitaríamos ver cómo es la tabla. Especialmente es importante que la fecha esté como DATE, DATETIME o TIMESTAMP, y nunca como VARCHAR.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 02/05/2013, 12:19
 
Fecha de Ingreso: mayo-2010
Mensajes: 103
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: Seleccionar noticias más próximas en el tiempo

Hola, el problema es que la guardo en campo int(28) como timestamp, no se si valdría así. La consulta actual es:

SELECT * FROM noticias ORDER BY fecha_noticia DESC LIMIT 2

De modo que obtengo las 2 últimas noticias según la fecha_noticia, he estado investigando un poco y creo que debería utizar CURDATE() y FROM_UNIXTIME() para la comparación, pero no se como conseguir las 2 noticias más próximas a CURDATE(), pues si pongo > obtendré las posteriores y si pongo < las anteriores, pero deberían ser las 2 más próximas, ya sea por arriba o por abajo.
__________________
salud
ainvar de los carnutos
  #4 (permalink)  
Antiguo 02/05/2013, 12:25
 
Fecha de Ingreso: mayo-2010
Mensajes: 103
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: Seleccionar noticias más próximas en el tiempo

Hola de nuevo, he estado haciendo pruebas y he armado la siguiente consulta:

SELECT * FROM `noticias` WHERE FROM_UNIXTIME( fecha_noticia, '%Y-%c-%d' ) < CURDATE() LIMIT 1

Esto me devuelve una noticia de enero, y hay noticias en febrero, marzo, abril y mayo. ¿Que está mal?
__________________
salud
ainvar de los carnutos
  #5 (permalink)  
Antiguo 02/05/2013, 12:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Seleccionar noticias más próximas en el tiempo

No está técnicamente mal, pero no estás pidiendo las más recientes, sino todas las anteriores a hoy.... No es lo mismo.
Cuando te mencioné con usar funciones de fecha, me refería a funciones que devuelvan, por ejemlo, la diferencia de días entre dos fechas dadas. Por ejemplo:
Código MySQL:
Ver original
  1. FROM `noticias`
  2. ORDER BY TIMESTAMPDIFF(DAY, CURDATE(), FROM_UNIXTIME( fecha_noticia, '%Y-%c-%d' )) ASC
O bien dentro de un rango determinado:
Código MySQL:
Ver original
  1. FROM `noticias`
  2. WHERE FROM_UNIXTIME( fecha_noticia, '%Y-%c-%d' ) BETWEEN DATE_SUB(FROM_UNIXTIME( fecha_noticia, '%Y-%c-%d' ), INTERVAL 1 MONTH) AND CURDATE()
  3. ORDER BY fecha_noticia DESC;



Nota final: INT(28) no existe, aunque te lo acepte. El valor que se pone entre paréntesis no representa la longitud de la cifra a almacenar, sino otra cosa. En un INT el mayor valor posible (y útil) es 11, pero no se usa para lo que crees.
Lee el manual de referencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 03/05/2013, 05:45
 
Fecha de Ingreso: mayo-2010
Mensajes: 103
Antigüedad: 13 años, 11 meses
Puntos: 4
Respuesta: Seleccionar noticias más próximas en el tiempo

Gracias por la respuesta gnzsoloyo, la verdad que he aprendido algunas cosas, aunque no consigo que me salga lo que quiero. De todos modos si no he entendido mal lo del int(28), el 28 no es el número de dígitos posibles si no una forma de mostrar los datos para que estos se alineen correctamente en caso de tamaño inferior al del campo, o sea que en este caso me valdrá cualquier número, pues no voy a mostrarlo directamente.

Estoy haciendo pruebas con tu código, a ver que sale. Gracias de nuevo.
__________________
salud
ainvar de los carnutos
  #7 (permalink)  
Antiguo 03/05/2013, 06:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Seleccionar noticias más próximas en el tiempo

El problema de no dejar que MySQL defina la longitud puesta en la declaración de los enteros es que si es demasiado corta puede traer problemas inesperados en la creación de las vistas, porque usan ese valor como referenciante del tamaño del dato, con lo que pueden generar errores de consulta por truncamiento. Y si es demasiado largo, provocan errores de performance en las mismas, porque el impacto en el uso de memoria de los procesos es excesiva, ya que no se reserva correctamente, o se usa en demasía.
En realidad, lo mejor es dejar el tamaño por defecto, y en todo caso, no ponerlo en el create table, para que MySQL lo administre por su cuenta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql, tiempo
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 06:23.