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

Fecha entre 2 fechas

Estas en el tema de Fecha entre 2 fechas en el foro de Mysql en Foros del Web. Tengo una fecha que viene de una bbdd mysql. El campo se llama fecha Quiero hacer una consulta que diga: SELECT * WHERE (fecha - ...
  #1 (permalink)  
Antiguo 27/12/2009, 12:48
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Fecha entre 2 fechas

Tengo una fecha que viene de una bbdd mysql. El campo se llama fecha

Quiero hacer una consulta que diga:
SELECT * WHERE (fecha - 7 dias) < "fecha de hoy" AND "fecha de hoy" > fecha.

Cómo puedo programar esto? Intenté así, pero no me funciona:

Código:

Código:
"SELECT * FROM horarios WHERE (fecha-8) < NOW() AND fecha > NOW()"
Gracias!
  #2 (permalink)  
Antiguo 27/12/2009, 16:42
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: Fecha entre 2 fechas

¿Probaste leer el manual de referencia para ver cuáles son las funciones para el manejo de fechas?
Es lo primero que debes hacer.
Capítulo 12. Funciones y operadores
12.5. Funciones de fecha y hora

Al margen de esto, hay un par de problemas:
1. NOW() devuelve un DATETIME, no un DATE, por lo que fecha se convertirá (conversiones implícitas) en un DATETIME y se realizará la igualdad conforme los valores obtenidos. Ten cuidado con eso.
2. La condición lógica expuesta no tiene sentido, ya que te devolverá registros sólo si el valor de fecha es un día mayor que hoy, es decir, si representa la fecha de mañana... SI el valor fuese pasado mañana, devolvería NULL.
¿Qué es exactamente lo que estás tratando de obtener?
__________________
¿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 27/12/2009, 19:21
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Fecha entre 2 fechas

Tengo un listado de eventos. Cada evento en un viernes del año.

Quiero que una semana antes mi PHP muestre el evento que corresponde esa semana.

Para eso pensé esa llamada en MYSQL.

Conoces alguna forma para hacerlo? La cosa es que el evento se muestre entre el día del evento y 7 días antes del evento.

Gracias!!
  #4 (permalink)  
Antiguo 27/12/2009, 22:22
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: Fecha entre 2 fechas

12.1.9. CREATE EVENT Syntax
El único problema es que necesitas MySQL 5.1.2 por lo menos para usarlo, y no sé de webhostings quelo tengan instalado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/12/2009, 03:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Fecha entre 2 fechas

Si he entendido bien, buscas que te traiga en el día de la fecha los eventos que están a menos de una semana. Esta consulta, que no he probado, creo que lo haría. Te he añadido el diasfaltan:
Código SQL:
Ver original
  1. SELECT *, DATEDIFF(campofechaevento, CURDATE()) diasfaltan FROM tutabla
  2.  WHERE CURDATE() BETWEEN DATE_SUB(campofechaevento, INTERVAL 7 DAY) AND campofechaevento
  3.  ORDER BY campofechaevento, diasfaltan

Última edición por jurena; 28/12/2009 a las 06:04
  #6 (permalink)  
Antiguo 28/12/2009, 06:08
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Fecha entre 2 fechas

Cómo se supone que debo usar el díasfaltan?

No me funciona el código.
  #7 (permalink)  
Antiguo 28/12/2009, 06:13
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Fecha entre 2 fechas

Cómo se supone que debo usar el díasfaltan?

No me funciona el código.
  #8 (permalink)  
Antiguo 28/12/2009, 06:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Fecha entre 2 fechas

Pues lo he probado y funciona. Dinos en qué formato tienes incluida la fecha, imagino que en un campo de tipo DATE, con el formato yyyy-mm-dd. Si es así esa consulta debería funcionar y además te dice cuántos días faltan para el evento desde el día de hoy, claro. Dinos también qué versión de MySQL usas, por si hubiera algún problema que tuviera que ver con la versión.
  #9 (permalink)  
Antiguo 28/12/2009, 16:45
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Fecha entre 2 fechas

Mira, lo he puesto así:
No comprendo el diasfaltan. No sé de dónde viene ese campo.

Uso campo DATE normal yyyy-mm-dd y mi version de mysql es 5.0.51a

Código PHP:
$result2 mysql_query("SELECT *, DATEDIFF(fecha, CURDATE()) diasfaltan FROM horarios WHERE CURDATE() BETWEEN DATE_SUB(fecha, INTERVAL 7 DAY) AND fecha ORDER BY fecha, diasfaltan");
$busqueda mysql_fetch_array($result2); 
  #10 (permalink)  
Antiguo 28/12/2009, 18: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: 16 años, 4 meses
Puntos: 2658
Respuesta: Fecha entre 2 fechas

Es un alias para el nombre de la columna resultado .
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 28/12/2009, 21:14
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Fecha entre 2 fechas

Mira, este es el código:

Código:
$result2 = mysql_query("SELECT *, DATEDIFF(fecha, CURDATE()) diasfaltan FROM horarios WHERE CURDATE() BETWEEN DATE_SUB(fecha, INTERVAL 7 DAY) AND fecha ORDER BY fecha, diasfaltan"); 
$busqueda = mysql_fetch_array($result2);  
foreach($busqueda as $k => $v) $busqueda[$k] = substr($v, 0, strlen($v) - 3);
Este es el problema que me da:

Warning: Invalid argument supplied for foreach() in C:\wamp\www\OH\horarios\tablaLateralHorarios.php on line 28
  #12 (permalink)  
Antiguo 28/12/2009, 23:48
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: Fecha entre 2 fechas

Código MySQL:
Ver original
  1.    H.*, DATEDIFF(fecha, CURDATE()) diasfaltan
  2. FROM horarios H
  3. ORDER BY fecha, diasfaltan;
Cuidado con el *. Si no le pones el nombre de la tabla o el alias te dará error de sintaxis.
__________________
¿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 29/12/2009, 00:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Fecha entre 2 fechas

samyb8,
es, como te dice gnzsoloyo, un alias, y su función es la de permitir cargar sus valores con un nombre, como si se tratase del nombre de un campo de la base (no olvides que se trata de un valor calculado). Lo que no entiendo es lo que quieres hacer con el código PHP que viene a continuación de la consulta y de la carga de los datos en el array $busqueda. Creo que el problema está en lo que viene a continuación (foreach...). ¿Qué quieres hacer exactamente? En realidad, a eso deben responderte en el foro PHP, pero dinos si quieres qué es para que podamos orientarte, si fuera necesario, hacia otro foro.
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 11:43.