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

Dias + 7!

Estas en el tema de Dias + 7! en el foro de Mysql en Foros del Web. Tengo el siguiente 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 ...
  #1 (permalink)  
Antiguo 31/12/2009, 06:15
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Dias + 7!

Tengo el siguiente 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");
Me busca una fila en mi tabla que cumpla el hecho de que la fecha de HOY está entre la fecha de esa fila (campo FECHA) y 7 días antes.

Básicamente, si hoy aplico el código, me trae la primera fecha que haya de aquí a 7 días.

Lo que quiero es que me haga lo mismo pero entre con los límites: FECHA y FECHA+7 días

Alguna idea???
Gracias!!
  #2 (permalink)  
Antiguo 31/12/2009, 06: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: 16 años, 4 meses
Puntos: 2658
Respuesta: Dias + 7!

Código MySQL:
Ver original
  1.     *,
  2.     DATEDIFF(fecha, CURDATE()) diasfaltan
  3. FROM horarios
  4.     CURDATE() BETWEEN fecha AND DATE_ADD(fecha, INTERVAL 7 DAY)
  5. ORDER BY fecha, diasfaltan;

Este tipo de cosas son las que debes buscar en el manual de referencia: 12.5. Funciones de fecha y hora

Te va a llevar menos tiempo...
__________________
¿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 31/12/2009, 06:48
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Dias + 7!

Ya, pero es complicado descifrar cómo hacerlo. Nada está tan claro en el manual.

Alguna idea?
  #4 (permalink)  
Antiguo 31/12/2009, 07: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: Dias + 7!

Cita:
Ya, pero es complicado descifrar cómo hacerlo. Nada está tan claro en el manual.
...
Disculpa, pero no me parece tan complicado, la función DATE_SUB(), que ya usaste, tiene su complementaria DATE_ADD(). No tiene mucho más que eso...
Si ya usaste una, la otra no debería ser un problema, simplemente en lugar de restar, sumas y ya.
El resto es cambiar el orden del rango que filtras (cosa que ya te puse en el ejemplo).
__________________
¿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 31/12/2009, 14:49
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Dias + 7!

Hola,

Lo he probado pero no me da lo que busco:

Código PHP:
$result2 mysql_query("SELECT *, DATEDIFF(fecha, CURDATE()) diasfaltan FROM horarios WHERE CURDATE() BETWEEN  DATE_ADD(fecha, INTERVAL 7 DAY) AND fecha ORDER BY fecha, diasfaltan"); 
- Este me trae la fila en la que "fecha" está entre hoy y dentro de 7 días.

Código PHP:
$result3 mysql_query("SELECT *, DATEDIFF(fecha, CURDATE()) diasfaltan FROM horarios WHERE CURDATE() BETWEEN DATE_SUB(fecha, INTERVAL 7 DAY) AND fecha AND pascua = '1' ORDER BY fecha, diasfaltan"); 
- Este es el nuevo, que quiero que me traiga la fila en la que "fecha" esté entre la fecha encontrada anteriormente y los siguientes 7 días.

Para ser más claro, tengo filas todos los sábados. Quiero mostrar las filas del próximo sábado (con el primer código sale) y del siguiente sábado (no me sale).

Gracias!!!!
  #6 (permalink)  
Antiguo 31/12/2009, 15:13
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: Dias + 7!

Para eso existe la función DAYOFWEEK(), que te devuelve un valor de 1 a 7 según qué dia de la semana sea la fecha.
Cita:
DAYOFWEEK(date)
Retorna el índice del día de la semana para date (1 = domingo, 2 = lunes, ..., 7 = sábado). Estos valores del índice se corresponden con el estándar ODBC.
mysql> SELECT DAYOFWEEK('1998-02-03');
-> 3
Usa esa.

P.D.: También está en 12.5. Funciones de fecha y hora

Lee el manual. Es la mejor forma de solucionar esos problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 31/12/2009, 16:45
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Dias + 7!

Esto no ayuda a lo que busco, porque en algunas ocasiones no es en sábado.

Estoy seguro que el segundo de los códigos de antes lo debería de hacer, pero tiene que haber algún detalle ahi...
  #8 (permalink)  
Antiguo 31/12/2009, 17:53
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: Dias + 7!

Entonces manéjalo en un stored procedure...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 31/12/2009, 18:53
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Dias + 7!

este codigo tengo yo es en SQL Server pero lo puedes modificar aqui te calcula el dia actual - 7 dias

Cita:
select sum(bol_pag)as total,datename(WEEKDAY,bol_fec)as SEMANA from boleta where bol_fec BETWEEN DATEADD(DD, -7, GETDATE()) AND GETDATE()
group by datename(WEEKDAY,bol_fec),datepart(WEEKDAY,bol_fec ) order by datepart(WEEKDAY,bol_fec)
  #10 (permalink)  
Antiguo 01/01/2010, 10:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Dias + 7!

samyb8,
¿qué es exactamente lo que buscas, que te saque los registros no del próximo sábado, sino del siguiente, es decir, dos sábados a partir de la fecha del día de hoy, es eso?
Si es eso, ya gnzsoloyo puso en tus manos todas las herramientas. Dices que todos los eventos tienen lugar en sábado. Pues bien:
Código SQL:
Ver original
  1. SELECT campofechaevento FROM tutabla
  2.  WHERE campofechaevento= DATE_ADD(CURDATE(), INTERVAL 14-DAYOFWEEK(CURDATE()) DAY))

Esto te busca exactamente la fecha, no del sábado próximo, sino del siguiente. No he hecho más que una prueba simple, pero si no funcionara algo, creo que bastaría con modificar alguna cifra de la consulta. Consiste en restar a 14 el valor del día de hoy(Domingo=1, ... Sábado=7), y luego buscar una la fecha que sale de sumar el valor de esa resta al día de hoy.

Última edición por jurena; 01/01/2010 a las 11:09
  #11 (permalink)  
Antiguo 03/01/2010, 08:36
 
Fecha de Ingreso: noviembre-2008
Mensajes: 259
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Dias + 7!

Era tan simple como:

Código PHP:
SELECT FROM horarios WHERE fecha CURDATE() LIMIT 1
$fecha1 
$busqueda['fecha']; 
Y para la siguiente entrada:
Código PHP:
$result4 mysql_query("SELECT * FROM horarios WHERE fecha > '$fecha1' LIMIT 1"); 
  #12 (permalink)  
Antiguo 03/01/2010, 08:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Dias + 7!

samyb,
eso es verdad, pero en la segunda consulta estás utilizando variables php y en este foro no podemos usarlas. La solución es buena y te vale para ambas fechas, aunque si no usas un ORDER BY fecha en ambas consultas puedes tener problemas si en alguna ocasión no almacenas los eventos según orden de fecha...
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 16:09.