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

Consultas con horas (disponibilidad según horario)

Estas en el tema de Consultas con horas (disponibilidad según horario) en el foro de Mysql en Foros del Web. Muy buenas foreros, llevo días rebanándome los sesos buscando solución a un problema de horarios con una web que tiene los parámetros de los empleados ...
  #1 (permalink)  
Antiguo 27/08/2010, 02:36
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 11 meses
Puntos: 0
Pregunta Consultas con horas (disponibilidad según horario)

Muy buenas foreros, llevo días rebanándome los sesos buscando solución a un problema de horarios con una web que tiene los parámetros de los empleados en una base de datos.

En esa base de datos guardo el horario de esas personas con un campo de hora de entrada y otro de hora de salida ambos en INT (2).

Lo que hacía hasta ahora era un condicional "WHERE entrada<='$horaactual' AND salida>'$horaactual' " y marcaba esos como disponibles, pero claro... con un turno nocturno de 20:00 a 02:00 ... no sirve... se me ocurre crear un script en php pero seguro que hay una opción con mysql que lo haga más simple... pero por más que busco no doy con la forma...

¿alguien tiene experiencia con este tipo de consultas y puede ayudarme?

Gracias y un saludo.
  #2 (permalink)  
Antiguo 27/08/2010, 03: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: 17 años
Puntos: 2658
Respuesta: Consultas con horas (disponibilidad según horario)

Hay dos formas de resolverlo:
1) Eliminas las que no están comprendidas en el horario diurno:
Código MySQL:
Ver original
  1. WHERE '$horaactual' NOT BETWEEN salida AND entrada
2) Consideras los segmentos separadamente:
Código MySQL:
Ver original
  1.     ('$horaactual' BETWEEN '00:00:00' AND salida) OR  
  2.     ('$horaactual' BETWEEN entrada AND '23:59:59')

El tema pasa por no ahogarse y tratar de razonarlo por partes...

En cualquier caso, esto me parece que es mejor resolverlo en un stored procedure, a menos que quieras manejar la decisión de la consulta en PHP...
__________________
¿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/08/2010, 04:05
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Consultas con horas (disponibilidad según horario)

Pues no lo consigo... por lo que me comentas primero tengo que identificar si es horario nocturno o no y si lo es luego con ese condicional no me devuelve los disponibles correctamente...

a ver si descubro algo porque no puede ser que se resista tanto ^^

Gracias.
  #4 (permalink)  
Antiguo 27/08/2010, 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: 17 años
Puntos: 2658
Respuesta: Consultas con horas (disponibilidad según horario)

Cita:
Pues no lo consigo... por lo que me comentas primero tengo que identificar si es horario nocturno o no y si lo es luego con ese condicional no me devuelve los disponibles correctamente...
Por eso es que te recomiendo poner todo en un stored procedure. En él puedes hacer que la resolución de ese problema se resuelva internamente y tu mandes los datos sin filtrar.

Por otra parte: ¿Qué formato de hora usa la variable en cuestión? HH:mm o HH:mm:ss?
__________________
¿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 27/08/2010, 04:20
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Consultas con horas (disponibilidad según horario)

El caso es que nunca he usado los stored procedure... ahí es donde me pierdo

El formato que uso es un INT de 2 valores pero puedo poner el que mejor convenga...

Gracias por la ayuda.
  #6 (permalink)  
Antiguo 27/08/2010, 04: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: 17 años
Puntos: 2658
Respuesta: Consultas con horas (disponibilidad según horario)

Lo que te pregunto de qué formato usas para la hora es importante en este contexto porque MySQL no puede interpretar cualquier cosa como una hora.
Sea, por ejemplo:
Código MySQL:
Ver original
  1. mysql> SELECT CURTIME() , CURTIME() BETWEEN  '7:20' AND '7:30';
  2. +-----------+--------------------------------------+
  3. | CURTIME() | CURTIME() BETWEEN  '7:20' AND '7:30' |
  4. +-----------+--------------------------------------+
  5. | 07:27:31  |                                    0 |
  6. +-----------+--------------------------------------+
  7. 1 row in set (0.00 sec)

Sin embargo, si lo comparo con una hora real:
Código MySQL:
Ver original
  1. mysql> SELECT CURTIME() , CURTIME() BETWEEN  '07:20:00' AND '07:30:00';
  2. +-----------+----------------------------------------------+
  3. | CURTIME() | CURTIME() BETWEEN  '07:20:00' AND '07:30:00' |
  4. +-----------+----------------------------------------------+
  5. | 07:29:29  |                                            1 |
  6. +-----------+----------------------------------------------+
  7. 1 row in set (0.00 sec)
Es decir que para poder responder TRUE o FALSE, el formato de un dato de tipo TIME o DATE debe ser correcto o no responderá.
En tu caso hay dos posibilidades:
- Si la tabla usa un INT para los campos entrada y salida, usar un INT como valor de $horaactual es correcto y la sintaxis sería:
Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE '$horaactual' NOT BETWEEN salida AND entrada;
o bien
Código MySQL:
Ver original
  1. FROM tabla WHERE
  2.     ('$horaactual' BETWEEN 0 AND salida) OR  
  3.     ('$horaactual' BETWEEN entrada AND 24)
- Si entrada y salida son TIME, la variable $horaactual debe respetar el formato de HH:mm:ss.
__________________
¿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 27/08/2010, 06:38
Avatar de Tollelle  
Fecha de Ingreso: enero-2005
Mensajes: 64
Antigüedad: 19 años, 11 meses
Puntos: 0
Respuesta: Consultas con horas (disponibilidad según horario)

Buf con mysql no lo conseguí, tuve que tirar de php.

Cuando tenga un poco más de tiempo investigo sobre ésto.

Gracias por todo ;)

Etiquetas: disponibilidad, horario, horas
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 21:13.