Busqueda compleja entre fechas y horas

vForum público de la plataforma de desarrollo Velneo

Moderador: vCoaches

Responder
cecilio
vCool
vCool
Mensajes: 241
Registrado: 20 May 2006, 01:47

Busqueda compleja entre fechas y horas

Mensaje por cecilio »

Hola.
Gestión de vehiculos. Un vehiculo puede estar solicitado de fecha inicial a fecha final de hora inicio a hora final. ¿ Ok ? por ejemplo de lunes a miercoles de 5 a 7 de la tarde.

Al asignar una nueva taréa necesito saber si un vehiculo ya está asignado entre ese rango.

Siguiendo el ejemplo anterior, imagina que necesito saber si el martes a las 6 está libre.

¿ como tendría que configuar los indices y la busqueda para que sea de la forma más eficiente y rápida posible ?

Quiero meter la busqueda en una función, para que me devuelva 0 o 1, pasandole: codigo de vehiculo, fecha y hora de busqueda.

Gracias.
Saludos Cordiales
cecilio
vCool
vCool
Mensajes: 241
Registrado: 20 May 2006, 01:47

Mensaje por cecilio »

Alguna ayuda ?

No se como montar la busqueda ni los indices.
Saludos Cordiales
fvarona
vAdviser
vAdviser
Mensajes: 554
Registrado: 16 Nov 2005, 14:03

Mensaje por fvarona »

Hola.

No está muy claro el enunciado, ya que "de lunes a jueves, de 5 a 7" puede entenderse:

- Desde el lunes a las 5, hasta el jueves a las 7
- Desde el lunes hasta el jueves, en la franja de 5 a 7.

De todos modos, una manera de afrontarlo es hacer la búsqueda en dos fases:

1) Búsqueda de fechas: dos índices de fechas, entre límites. La primera, busca aquellas reservas cuya fecha inicial sea anterior o igual a tu fecha; la segunda, busca aquellas cuya fecha final sea igual o posterior a tu fecha. El resultado son las reservas que se solapan (sólo en fechas) con tu fecha

2) A partir de ahí, recorres esa lista para ver si además también se solapan las horas.

La segunda parte es más lenta (no es una búsqueda), pero seguramente serán pocos registros los que coincidan.

Saludos,

Fran Varona
cecilio
vCool
vCool
Mensajes: 241
Registrado: 20 May 2006, 01:47

Mensaje por cecilio »

Efectivamente no está muy claro el enunciado.

Es la segunda opción, siguiendo con el ejemplo es de lunes a jueves en la franja de 5 a 7.

No me ha quedado muy claro como tendria que hacer las busquedas.

Ahora lo hago de una forma muy burda, usando un procedimiento y una función:
1º Cargo lista de vehiculos por código, con el código del vehiculo interesado.
2º Un bucle for desde fecha 1 a fecha 2
3º un nuevo bucle for desde hora1 a hora2
4 invoco función con los parametros: cod.vehiculo, fecha.

La función carga la lista de asignaciones por cód. de vehiculo, con el codigo que se le pasa.
1º comprueba se fecha está entre fecha inicial y fecha final, y si está comprueba si la hora está entre hora inicial y hora final.
Retorna 1si fecha y hora está comprendida en algún registro.
Saludos Cordiales
Avatar de Usuario
Cuco
vLeader
vLeader
Mensajes: 1179
Registrado: 20 Sep 2005, 20:45

Mensaje por Cuco »

No son fácilies de manejar con búsquedas los intervalos de fechas + horas.

En tu caso, todo depende mucho de cómo hayas montado las tablas.

Yo generaría un calendario con la profundidad adecuada (uno o dos años) en una tabla Horas con código, fecha y hora (me imagino que el alquiler se hará por horas completas)

Al alquilar un vehículos, les generaría u histórico con todas y cada una de las horas alquiladas: tabla Horas_alquiladas histórica de Vehículos y de Horas

Campos de las tablas:

Vehículos: Código, otros campos de interés,....
Horas: Código, fecha, hora
Horas_Alquiladas: Vehículos.Código, Horas.Código

Cuando alquilas el vehículo, en el calendario (tabla Horas), seleccionas todas las horas del intervalo y por un proceso seleccionas un vehículo y generas el histórico de Horas_Alquiladas.

Para saber qué vehículos están disponibles en un intervalo concreto, seleccionas el intervalo en el calendario y por proceso Cargas Historico de Horas_Alquiladas de todas las horas de ese intervalo, luego Cargas Maestro Vehículos de estas Horas_Alguiladas, con lo que obtienes los vehículos NO disponibles. Con esto ya tienes información suficiente para alquilar un determinado Vehículo. Si guardas en una cesta los NO disponibles y la restas de la lista total de vehículos, tendrás la lista de Vehículos disponibles. Y así sucesivamente.....
Como ves no se utilizan las fechas para buscar, sólo los códigos de las tablas.
杜鹃鸟
Juan Miguel Figueroa Dorrego

Fontanía Lógica ™, E.P.I.
Una empresa personal imaginaria
Posición:
43.532928,-5.628616
Responder