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

consulta de validacion

Estas en el tema de consulta de validacion en el foro de Mysql en Foros del Web. hola a todos tengo una duda en una validacion de reservas.es lo siguiente en un dia pueden estar verias reservaciones, mas no pueden haber dos ...
  #1 (permalink)  
Antiguo 13/03/2012, 21:33
Avatar de shake2427  
Fecha de Ingreso: julio-2011
Mensajes: 116
Antigüedad: 12 años, 9 meses
Puntos: 3
consulta de validacion

hola a todos

tengo una duda en una validacion de reservas.es lo siguiente
en un dia pueden estar verias reservaciones, mas no pueden haber dos en el mismo horario, o en el mismo rango de tiempo,un ejemplo es lo siguiente


fecha inicial ----------------------fecha final

1. 2012-03-13 10:00:00 ------------ -- 2012-03-13 10:30:00

2. 2012-03-13 09:00:00 ------------- 2012-03-13 10:00:00


si va a modificar la reserva 2 en fecha final a esto 2012-03-13 10:20:00
no deberia dejarme hacerlo, por esta en el rango de una reservacion ya hecha
esto lo tengo con la siguiente consulta y me funciona perfectamente.

Código MySQL:
Ver original
  1. (select Date_start,Date_end,Status from medical_reservations  
  2.         WHERE DoctorsID='B9507B30-9F68-0A55-63E0CB1036AE420A'
  3.         AND '2012-03-13 10:20:00' >=Date_start
  4.         AND '2012-03-13 10:20:00' < Date_end
  5.         AND Status !='Cancelada'
  6.         AND Status !='Esperando por Cancelacion')
  7.             UNION
  8.     (select Date_start,Date_end,Status from register_reservations
  9.         WHERE DoctorsID='B9507B30-9F68-0A55-63E0CB1036AE420A'
  10.         AND '2012-03-13 10:20:00' >=Date_start
  11.         AND '2012-03-13 10:20:00' < Date_end
  12.         AND Status !='Cancelada'
  13.         AND Status !='Esperando por Cancelacion'
  14.     )


pero si cambio la reserva 2 fecha final a esto 2012-03-13 11:00:00 tampoco deberia dejarme hacerlo por que tambien se encuentra en un rango de una reserva ya hecha

pero esta consulta no me funciona.
me pondrian decir que esta mal?

gracias de antemano
  #2 (permalink)  
Antiguo 14/03/2012, 04: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: consulta de validacion

Esta condición es imposible:
Código MySQL:
Ver original
  1. AND '2012-03-13 10:20:00' >=Date_start
  2. AND '2012-03-13 10:20:00' < Date_end
Mirala bien... ¿Qué hora puede cumplir eso?
¿QUé número es al mismo tiempo mayor o igual a 1 y menor a 1?
__________________
¿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 14/03/2012, 07:31
Avatar de shake2427  
Fecha de Ingreso: julio-2011
Mensajes: 116
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: consulta de validacion

obvio que si funciona, si no en lo que estoy haciendo no me funcionaria.

date_start y date_end son dos campos diferentes en la base de datos.

y lo que me valida es que la fecha que ingreso (2012-03-13 10:20:00) sea mayor o igual a la fecha inicial (date_start) y sea menor a la fecha final (Date_end),esta consulta me esta haciendo lo mismo que un between pero sin incluirle que sea igual a la fecha final.
  #4 (permalink)  
Antiguo 14/03/2012, 09:15
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: consulta de validacion

Sorry, leí al vuelo.
Prueba con:
Código MySQL:
Ver original
  1. SELECT Date_start,Date_end,Status
  2. FROM medical_reservations  
  3.     DoctorsID='B9507B30-9F68-0A55-63E0CB1036AE420A'
  4.     AND ('2012-03-13 10:20:00' >=Date_start)
  5.     AND ('2012-03-13 10:20:00' < Date_end OR '2012-03-13 10:20:00' >= Date_end)
  6.     AND Status !='Cancelada'
  7.     AND Status !='Esperando por Cancelacion'
__________________
¿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 15/03/2012, 15:15
Avatar de shake2427  
Fecha de Ingreso: julio-2011
Mensajes: 116
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: consulta de validacion

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. SELECT Date_start,Date_end,Status
  2. FROM medical_reservations  
  3.     DoctorsID='B9507B30-9F68-0A55-63E0CB1036AE420A'
  4.     AND ('2012-03-13 10:20:00' >=Date_start)
  5.     AND ('2012-03-13 10:20:00' < Date_end OR '2012-03-13 10:20:00' >= Date_end)
  6.     AND Status !='Cancelada'
  7.     AND Status !='Esperando por Cancelacion'
no me sirvio la consulta

lo que tengo que hacer es que dos reservaciones con las mismas fechas no pueden existir, o que ocupen el rango de alguna otra reservacion.
dame una idea de como hacer esto?
  #6 (permalink)  
Antiguo 15/03/2012, 18:44
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: consulta de validacion

Cita:
dame una idea de como hacer esto?
La mejor solución suele ser usar el razonamiento...

Mira, hay cuatro condiciones que no se deben dar para validar un horario entrante, pero tienes que hacerlo con los dos parámetros y no con uno solo:
1) Que el inicio y el final del periodo entrante esté completamente contenido en un turno ya dado (solapamiento total).
2) Que el inicio del turno nuevo esté entre el inicio y el final de un turno ya dado (solapamiento superior).
3) Que el final del turno nuevo esté entre el inicio y el final de un turno ya dado (solapamiento inferior).
4) Que el un turno dado quede completamente contenido en el tuno nuevo (solapamiento por exceso).
La condición 1) se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end)
  2. ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end)
La condición 2 se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end)
  2. ('2012-03-13 10:20:00' >= Date_end)
La condición 3 se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' <= Date_start)
  2. ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end)
La condición 4 se verifica si:
Código MySQL:
Ver original
  1. ('2012-03-13 09:00:00' <= Date_start)
  2. ('2012-03-13 10:20:00' >= Date_end)
En otras palabras, para cubrir todas las posibilidades necesitarías:

Código MySQL:
Ver original
  1. (('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end) AND ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end))
  2. (('2012-03-13 09:00:00' BETWEEN Date_start AND Date_end) AND ('2012-03-13 10:20:00' >= Date_end))
  3. (('2012-03-13 09:00:00' <= Date_start) AND ('2012-03-13 10:20:00' BETWEEN Date_start AND Date_end))
  4. (('2012-03-13 09:00:00' <= Date_start) AND ('2012-03-13 10:20:00' >= Date_end))

No te espantes por lo kilométrico. He visto búsquedas más complicadas que eso...
__________________
¿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 16/03/2012, 07:37
Avatar de shake2427  
Fecha de Ingreso: julio-2011
Mensajes: 116
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: consulta de validacion

gracias eso era lo que necesitaba, ademas de que esta muy bien explicado.
  #8 (permalink)  
Antiguo 16/03/2012, 08:08
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: consulta de validacion

Me alegro que te sirva.
En general, cuando estás haciendo muchas pruebas sin que resulten útiles, puede que estés perdiendo la perspecitva, en medio de demasiadas variaciones. Nos pasa a todos.
Lo mejor es volver al principio y plantearlo en papel de un modo detallado, y la respuesta surge sola.
__________________
¿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: select
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 22:47.