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

como hacer una consulta asin...

Estas en el tema de como hacer una consulta asin... en el foro de Mysql en Foros del Web. Hola foro, bueno tengo una duda que la comento por si me podeis ayudar, si tengo una tabla con tres campos por ejemplo algo asin: ...
  #1 (permalink)  
Antiguo 04/08/2012, 16:56
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 13 años
Puntos: 10
como hacer una consulta asin...

Hola foro, bueno tengo una duda que la comento por si me podeis ayudar, si tengo una tabla con tres campos por ejemplo algo asin:

id
1
fecha
22-02-2013
fecha1
20-02-2012
fecha2
22-09-2012




teniendo algo asin, yo lo que quiero es que si el campo fecha es mayor que la fecha actual me compruebe si fecha1 o fecha2 son menores que la fecha actual y si son menores que la fecha actualice las fechas 24 horas mas, en este ejemplo tendria que actualizar la fecha 1 que esta asin: 20-02-2012 y actualizarla asin: 21-02-2012,

como podria hacer una consulta de este tipo, saludos.
  #2 (permalink)  
Antiguo 04/08/2012, 17:05
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, 5 meses
Puntos: 2658
Respuesta: como hacer una consulta asin...

Por empezar, necesitamos asegurarnos de que las fechas están correctamente almacenadas.
¿Qué tipo de columna usaste?
¿DATE, DATETIME, TIMESTAM... o 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 05/08/2012, 03:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 13 años
Puntos: 10
Respuesta: como hacer una consulta asin...

Hola gnzsoloyo, en principio gracias por tu interes en ayudarme, bueno el tipo de dato que utilizo es datetime, y en realidad el formato de la fecha lo tengo asin:

2012-02-22 23:46:22

osea que la tabla quedaria asin:

id
1
fecha
2012-02-22 23:46:22
fecha1
2012-02-20 10:00:00
fecha2
2012-09-22 12:20:00

saludos.
  #4 (permalink)  
Antiguo 05/08/2012, 08:21
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, 5 meses
Puntos: 2658
Respuesta: como hacer una consulta asin...

Esto le sumaría 24 horas (un día) a los campos fecha1 y fecha2 a todos los registros que cumplan como condiciones simultáneas y obligatorias:
1) Que el campo fecha sea mayor que la fecha actual.
2) Que al menos uno de los campos fecha1 y fecha2 sea anterior a la fecha actual.

Código MySQL:
Ver original
  1. UPDATE tabla
  2.     fecha1 = ADDDATE(fecha, INTERVAL 1 DAY),
  3.     fecha2 = ADDDATE(fecha, INTERVAL 1 DAY),
  4.     DATE(fecha) > CURDATE()
  5.     AND
  6.     (DATE(fecha1)<CURDATE() OR DATE(fecha2) < CURDATE())

Este modelo no contempla las horas de cada fecha, sino sólo la fecha. La diferencia estriba en que cuando MySQL compara dos fechas dadas en formato DATETIME, las horas con sus minutos y segundos se consideran para el cálculo, y una diferencia de un segundo hace que una fecha sea menor que otra. Como no aclaraste cuánta precisión necesitas calcular, sólo tomé en consideración la fecha.

Tomar fecha y hora sólo implicaría eliminar las funciones DATE() y cambiar CURDATE() por NOW():

Código MySQL:
Ver original
  1. UPDATE tabla
  2.     fecha1 = ADDDATE(fecha, INTERVAL 1 DAY),
  3.     fecha2 = ADDDATE(fecha, INTERVAL 1 DAY),
  4.     fecha > NOW()
  5.     AND
  6.     (fecha1 < NOW() OR fecha2 < NOW())
__________________
¿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 05/08/2012, 09:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 13 años
Puntos: 10
Respuesta: como hacer una consulta asin...

Hola gnzsoloyo, en realidad si que quiero que contemple las horas, en la consulta que quiero hacer solo quiero que me actualice los campos fecha1 o fecha2 que sean menores que la fecha actual, no los dos, osea que si fecha es mayor que la fecha actual me actualice los campos fecha1,fecha2 pero siempre que estos campos sean menores que la fecha actual si no los debe dejar como estaban, espero que me sigas ayudando , un saludo.

Última edición por pithon; 05/08/2012 a las 14:10
  #6 (permalink)  
Antiguo 05/08/2012, 16:46
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, 5 meses
Puntos: 2658
Respuesta: como hacer una consulta asin...

Solo hay que usar las funciones adecuadas. Están todas en el manual:
Código MySQL:
Ver original
  1. UPDATE tabla
  2.     fecha1 = IF(fecha1 < NOW() , ADDDATE(fecha, INTERVAL 1 DAY), fecha1),
  3.     fecha2 = IF(fecha2 < NOW() , ADDDATE(fecha, INTERVAL 1 DAY), fecha2),
  4.     fecha > NOW();
__________________
¿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 06/08/2012, 04:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 13 años
Puntos: 10
Respuesta: como hacer una consulta asin...

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Solo hay que usar las funciones adecuadas. Están todas en el manual:
Código MySQL:
Ver original
  1. UPDATE tabla
  2.     fecha1 = IF(fecha1 < NOW() , ADDDATE(fecha, INTERVAL 1 DAY), fecha1),
  3.     fecha2 = IF(fecha2 < NOW() , ADDDATE(fecha, INTERVAL 1 DAY), fecha2),
  4.     fecha > NOW();

me da un error en el where y no consigo saber porque, tambien intento hacer un select seguido del update pero no se si es posible, saludos.
  #8 (permalink)  
Antiguo 06/08/2012, 04: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, 5 meses
Puntos: 2658
Respuesta: como hacer una consulta asin...

No te da un error en el WHERE. Lo que te debe estar diciendo es que "hay un error cerca de 'WHERE ..."
Es un error producto de que copiaste y pegaste sin revisar lo que copias.
Si. Dejé un error intencionalmente para saber si estás analizando lo que te paso o sólo lo copias.
Es un error muy fácil de ver.
Cita:
tambien intento hacer un select seguido del update pero no se si es posible, saludos.
MySQL no admite UPDATE o DELETE junto con un SELECT sobre la misma tabla.
__________________
¿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 06/08/2012, 05:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 13 años
Puntos: 10
Respuesta: como hacer una consulta asin...

Ok, ahora si que encontre el error, era una simple como que sobraba, y cambie tambien el nombre del campo en el ADDDATE, osea quedando asin el codigo correcto:

Código MySQL:
Ver original
  1. UPDATE tabla
  2.     SET
  3.         fecha1 = IF(fecha1 < NOW() , ADDDATE(fecha1, INTERVAL 1 DAY), fecha1),
  4.         fecha2 = IF(fecha2 < NOW() , ADDDATE(fecha1, INTERVAL 1 DAY), fecha2)
  5.     WHERE
  6.         fecha > NOW();

Muchisimas gracias gnzsoloyo por tu interes en que aprendamos, un saludo.

Tengo una pregunta, si por ejemplos tengo una tabla con 5000 registros donde hago una consulta de un select tardando un periodo de timepo x, mi pregunta es:

Este periodo aumentaria mucho si antes de un select hago un update?
todo esto programandolo desde la web claro.

Saludos.

Última edición por pithon; 06/08/2012 a las 07:25

Etiquetas: tabla, tipo, campos
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 14:50.