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

buscar disponibilidad

Estas en el tema de buscar disponibilidad en el foro de Mysql en Foros del Web. Estimados tengo la siguiente informacion de ejemplo en una tabla mysql: id, bien, fechai, fechat 1, salon, 2006-05-09 10:00:00, 2006-05-09 11:00:00 2, salon, 2006-05-09 13:00:00, ...
  #1 (permalink)  
Antiguo 09/05/2006, 10:29
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
buscar disponibilidad

Estimados tengo la siguiente informacion de ejemplo en una tabla mysql:

id, bien, fechai, fechat
1, salon, 2006-05-09 10:00:00, 2006-05-09 11:00:00
2, salon, 2006-05-09 13:00:00, 2006-05-09 14:00:00
3, salon, 2006-05-09 15:00:00, 2006-05-09 17:00:00

me gustaria que me ayudaran por favor a construir una consulta de tal manera que al dar una fecha y hora determinada me diga si el bien (salon) esta disponible o no, ya que esas fechas representan el periodo de uso del salon (fechai = fecha inicio, fechat = fecha termino), me podrian ayudar con esto, que artos dolores de cabeza de ma dado???

Gracias!
  #2 (permalink)  
Antiguo 09/05/2006, 11:42
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 17 años, 11 meses
Puntos: 2
Podría ser algo así:

$sql = "SELECT * FROM `tablamysql` WHERE `fechai`>'".$FECHADADA."' AND `fechat`<'".$FECHADADA."'";
$result = mysql_query($sql,$db); $n = mysql_num_rows($result);

if ($n>0) {
echo "DISPONIBLE!";
} else {
echo "NO DISPONIBLE";
}

Saludos!

-----------------------------
Carles Martínez · xatcom.net · diseño y comunicación
  #3 (permalink)  
Antiguo 09/05/2006, 12:13
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
carmarri, gracias por tu respuesta, pero es lo que yo ya tenia, y no resulta, al poner fechas dentro y fuera de los rangos dados, entrega siempre "NO DISPONIBLE"
  #4 (permalink)  
Antiguo 09/05/2006, 12:20
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 17 años, 11 meses
Puntos: 2
prueba con el comando BETWEEN. pero creo, por lo que me dices que el error no está ahi, puede que venga de otro sitio.

prueba a depurar el programa. Añade un echo $sql; antes del $result = mysql_query($sql,$db); y mira a ver que cadena hay. quizás no le estás pasando bien los datos. A mi me ha pasado muchas veces...
  #5 (permalink)  
Antiguo 09/05/2006, 12:33
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
esto me da poniendo las 9:00 hrs... me deberia dar disponible, pero NO.

SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 09:00:00' AND `fechat`<'2006-05-09 09:00:00'
  #6 (permalink)  
Antiguo 09/05/2006, 12:51
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 17 años, 11 meses
Puntos: 2
Ya se donde está el problema! que tontería. Yo mismo me había equivocado en el código en el ejemplo que te he puesto. Lo que estás haciendo con esa búsqueda es encontrar los horarios ocupados, por tanto, la búsqueda sería igual pero cambiando el IF.

$sql = "SELECT * FROM `tablamysql` WHERE `fechai`>'".$FECHADADA."' AND `fechat`<'".$FECHADADA."'";
$result = mysql_query($sql,$db); $n = mysql_num_rows($result);

if ($n<0) {
echo "OCUPADO!";
} else {
echo "DISPONIBLE";
}

JEjejeje. Lo estábamos haciendo al revés.

Saludos!
  #7 (permalink)  
Antiguo 09/05/2006, 13:07
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
no resulta carmarri, se supone que entre las 10 y las 11 esta ocupado, pero mira...

SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 09:00:00' AND `fechat`<'2006-05-09 09:00:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 09:30:00' AND `fechat`<'2006-05-09 09:30:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 10:00:00' AND `fechat`<'2006-05-09 10:00:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 10:30:00' AND `fechat`<'2006-05-09 10:30:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 11:00:00' AND `fechat`<'2006-05-09 11:00:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 11:30:00' AND `fechat`<'2006-05-09 11:30:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 12:00:00' AND `fechat`<'2006-05-09 12:00:00'
DISPONIBLE
SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 12:30:00' AND `fechat`<'2006-05-09 12:30:00'
DISPONIBLE
  #8 (permalink)  
Antiguo 09/05/2006, 13:34
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 4 meses
Puntos: 5
Por que no pruebas con esto:
Código PHP:
//
SELECT *,'Disponible' as Estado 
FROM tabla 
WHERE fechai
>'$fechaVerificar' OR fechat<'$fechaVerificar' 
saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #9 (permalink)  
Antiguo 09/05/2006, 13:46
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
Gracias deadlykyo, pero tampoco funciona, mira...

SELECT * FROM test1 WHERE fechai>'2006-05-09 09:00:00' OR fechat<'2006-05-09 09:00:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 09:30:00' OR fechat<'2006-05-09 09:30:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 10:00:00' OR fechat<'2006-05-09 10:00:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 10:30:00' OR fechat<'2006-05-09 10:30:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 11:00:00' OR fechat<'2006-05-09 11:00:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 11:30:00' OR fechat<'2006-05-09 11:30:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 12:00:00' OR fechat<'2006-05-09 12:00:00'
DISPONIBLE
SELECT * FROM test1 WHERE fechai>'2006-05-09 12:30:00' OR fechat<'2006-05-09 12:30:00'
DISPONIBLE
  #10 (permalink)  
Antiguo 09/05/2006, 14:25
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 4 meses
Puntos: 5
me parece raro lo que dices ya que me cree una tabla con dos campos datetime y funciona sin problemas, intentaste usar between, esto te deberia devolver los No Disponibles:

SELECT * FROM test1 WHERE '2006-05-09 09:00:00' BETWEEN fechai AND fechat;

haber como te va con esta y nos cuentas, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #11 (permalink)  
Antiguo 09/05/2006, 14:35
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
ya probe lo que me dices, y no pasa nada, funciona super bien con un solo registro... pero ingresa mas registros a ver como te funciona!... yo estaba feliz hasta que ingrese nuevos registros....
  #12 (permalink)  
Antiguo 09/05/2006, 14:52
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 4 meses
Puntos: 5
que raro probe con los 3 registros que pusiste en tu primer post y funciono, pero solo me muestra los que estan No disponibles, que es lo que sucede te muestra todos disponibles o no disponibles, como son los datos tienes mas de un registro por cada 'bien' o es un solo registro por 'bien' que tienes, bueno ejecutaste la consulta directo en mysql o en algun frontend, o la ejecutas mediante algun lenguaje, tal vez si pones un ejemplo de datos mas grande y de esos datos que obtener, y quieres para un bien o que revise para todos los bienes, bueno tal vez con eso pueda saber por que no funciona, pero me parece raro, saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #13 (permalink)  
Antiguo 10/05/2006, 12:56
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
se supone que el campo bien, tiene diversos bienes, pueden ser salon1, salon2, salon3... pero le hecho de que tiene muchas fechas lo hace mas complejo, ya que la primera opcion dada aca en el foro, funciona con un solo registro.

me dieron este ejemplo de oracle, que y que lo transforme a mysql, pero no funciona... a ver si lo identifican ustedes o sirve para solucionar este problemilla...


select id from tutabla
where trunc(fechai)=to_date(FECHAI_CONSULTADA)
and ( to_char(fechai,'HH24:MI') between to_char(to_date(HORASI_CONSULTADA,'HH24:MI')+(1/1440),'HH24:MI')
and to_char(to_date(HORAST_CONSULTADA,'HH24:MI')-(1/1440),'HH24:MI')
or to_char(fechat,'HH24:MI') between to_char(to_date(HORASI_CONSULTADA,'HH24:MI')+(1/1440),'HH24:MI')
and to_char(to_date(HORAST_CONSULTADA,'HH24:MI')-(1/1440),'HH24:MI')
or to_char(to_date(HORASI_CONSULTADA,'HH24:MI')+(1/1440),'HH24:MI') between to_char(fechai,'HH24:MI')
and to_char(fechat,'HH24:MI')
or to_char(to_date(HORAST_CONSULTADA,'HH24:MI')-(1/1440),'HH24:MI') between to_char(fechai,'HH24:MI')
and to_char(fechat,'HH24:MI'))


select id from test1
where DATE_FORMAT(fechai, '%Y-%m-%d')=DATE_FORMAT('2006-05-09 08:00:00', '%Y-%m-%d')
and ( DATE_FORMAT(fechai,'%H:%i') between DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(fechai)+6 0),'%H:%i')
and DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(fechat)-60),'%H:%i')
or DATE_FORMAT(fechat, '%H:%i') between DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(fechai)+6 0),'%H:%i')
and DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(fechat)-60),'%H:%i')
or DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(fechai)+6 0),'%H:%i') between DATE_FORMAT(fechai, '%H:%i')
and DATE_FORMAT(fechat, '%H:%i')
or DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP(fechat)-60),'%H:%i') between DATE_FORMAT(fechai, '%H:%i')
and DATE_FORMAT(fechat, '%H:%i'))
  #14 (permalink)  
Antiguo 10/05/2006, 13:53
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años
Puntos: 3
Cita:
Iniciado por mapino
esto me da poniendo las 9:00 hrs... me deberia dar disponible, pero NO.

SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 09:00:00' AND `fechat`<'2006-05-09 09:00:00'
Si sigues con esta consulta, nunca te va a salir lo que deseas. Fijate como estas haciendo la condición. Le estas diciendo que verifique que sea mayor que la fecha inicial y tambien que sea mayor a la fecha final?

SELECT * FROM `test1` WHERE `fechai`>'2006-05-09 09:00:00' AND '2006-05-09 09:00:00'<'fechat'
Y si pruebas con esto?
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #15 (permalink)  
Antiguo 10/05/2006, 14:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
Gracias pequeñoMauro, pero no dio resultado tu alternativa.... no entrega ninguna diferencia a la misma fecha y diferentes horas

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 09:00:00' AND '2006-05-09 09:00:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 09:30:00' AND '2006-05-09 09:30:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 10:00:00' AND '2006-05-09 10:00:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 10:30:00' AND '2006-05-09 10:30:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 11:00:00' AND '2006-05-09 11:00:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 11:30:00' AND '2006-05-09 11:30:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 12:00:00' AND '2006-05-09 12:00:00' < t.fechat
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai > '2006-05-09 12:30:00' AND '2006-05-09 12:30:00' < t.fechat
DISPONIBLE
  #16 (permalink)  
Antiguo 11/05/2006, 10:55
 
Fecha de Ingreso: marzo-2005
Mensajes: 59
Antigüedad: 19 años
Puntos: 1
Estimados, econtré la respuesta!... invertí los signos "mayor que" y "menor que" y entrega los resultados que andaba buscando!... les dejo ejemplo!


SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 09:00:00' AND t.fechat >= '2006-05-09 09:00:00'
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 09:30:00' AND t.fechat >= '2006-05-09 09:30:00'
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 10:00:00' AND t.fechat >= '2006-05-09 10:00:00'
OCUPADO!

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 10:30:00' AND t.fechat >= '2006-05-09 10:30:00'
OCUPADO!

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 11:00:00' AND t.fechat >= '2006-05-09 11:00:00'
OCUPADO!

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 11:30:00' AND t.fechat >= '2006-05-09 11:30:00'
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 12:00:00' AND t.fechat >= '2006-05-09 12:00:00'
DISPONIBLE

SELECT * FROM test1 t WHERE t.fechai <= '2006-05-09 12:30:00' AND t.fechat >= '2006-05-09 12:30:00'
DISPONIBLE
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 00:00.