Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta SQL no funciona

Estas en el tema de Consulta SQL no funciona en el foro de PHP en Foros del Web. Que tal! Bueno, tengo un formulario en donde me solicita el nombre del edificio, la habitacion (las habitaciones corresponden al edificio seleccionado), fecha de entrada ...
  #1 (permalink)  
Antiguo 31/08/2013, 10:31
 
Fecha de Ingreso: agosto-2013
Ubicación: Cuernavaca
Mensajes: 27
Antigüedad: 10 años, 7 meses
Puntos: 0
Consulta SQL no funciona

Que tal!

Bueno, tengo un formulario en donde me solicita el nombre del edificio, la habitacion (las habitaciones corresponden al edificio seleccionado), fecha de entrada y fecha de salida.

Código PHP:
Ver original
  1. $fecha_in = $_POST["fecha_in"];
  2. $fecha_out = $_POST["fecha_out"];
  3. $habitacion = $_POST["habitacion"];
  4. $id_edificio = $_POST["id_edificio"];

Ahora necesito una consulta que busque en la BD el edificio, habitacion y fechas para verificar si esta ocupada o no. Por lo tanto tengo lo siguiente:

Código PHP:
Ver original
  1. $reservaciones = mysql_query("SELECT * FROM reservaciones WHERE fecha_entrada BETWEEN '".$fecha_in."' AND '".$fecha_out."' OR fecha_salida BETWEEN '".$fecha_in."' AND '".$fecha_out."' AND id_edificio=".$id_edificio." AND habitacion LIKE '%$habitacion%'")or die(mysql_error());

Lo que hace esto es solo verificar las fechas, independientemente si es el mismo edificio o la habitacion, por lo tanto si quiero confirmar las fechas de un edificio en otro me dice que esta ocupado.

Que estoy haciendo mal!!!
De antemano gracias por la ayudadita
  #2 (permalink)  
Antiguo 31/08/2013, 10:41
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta SQL no funciona

Te sugiero que aprendas a depurar tus consultas:

1. Guardas la consulta en una cadena de texto
2. Imprimes la consulta y observas si está bien escrita
3. Si te es posible copiar la consulta y ejecutarla a mano
4. Ejecutar la consulta con PHP y depurar en caso de error

Código PHP:
$sql "SELECT * FROM reservaciones WHERE fecha_entrada BETWEEN '".$fecha_in."' AND '".$fecha_out."' OR fecha_salida BETWEEN '".$fecha_in."' AND '".$fecha_out."' AND id_edificio=".$id_edificio." AND habitacion LIKE '%$habitacion%'";
echo 
"SQL=$sql" 
Ahora, veo que sólo estás haciendo el último paso.

A lo que pregunto, ¿recibes un error o algo?

Vamos, adivinar no podemos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 31/08/2013, 10:56
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: Consulta SQL no funciona

Hola, aparte de lo que dice pateketrueke.

No entiendo por que comparas habitacion con LIKE

LIKE '%$habitacion%'

Deberia ser un valor unico ¿no?

Saludos
  #4 (permalink)  
Antiguo 31/08/2013, 11:09
 
Fecha de Ingreso: agosto-2013
Ubicación: Cuernavaca
Mensajes: 27
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Consulta SQL no funciona

Bueno, hice lo que me dice pateketrueke y me escribe esto

SQL=Resource id #6

Se que eso quiere decir que no esta tomando un valor. Pero cuando las pongo por separado, si hace lo correcto.

Código PHP:
Ver original
  1. $habitaciones = mysql_query("SELECT * FROM reservaciones WHERE habitacion LIKE '%$habitacion%' AND id_edificio=".$id_edificio."") or die(mysql_error());
  2. // Me manda la habitacion y el id_edificio correcto

Código PHP:
Ver original
  1. $reservaciones = "SELECT * FROM reservaciones WHERE fecha_entrada BETWEEN '".$fecha_in."' AND '".$fecha_out."' OR fecha_salida BETWEEN '".$fecha_in."' AND '".$fecha_out."'"; // Corrobora todas las fechas y verifica que esten ocupadas

Lo que intente hacer fue juntarlas pero no me dio resultado.

No la habitación no es único ya que en un Edificio A y Edificio B puedo tener una habitacion 101A
  #5 (permalink)  
Antiguo 31/08/2013, 11:17
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta SQL no funciona

Cita:
Iniciado por desweb Ver Mensaje
Bueno, hice lo que me dice pateketrueke y me escribe esto

SQL=Resource id #6
No, de hecho lo hiciste mal.

En el código que te sugerí jamás lleva mysql_query(), entiende, la consulta como cadena de texto sin ejecutar es lo que debes imprimir.

Si te sale #resource es porque imprimiste el valor que devuelve mysql_query(), y ese es tu error.

Lee bien los comentarios que se te hacen.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 31/08/2013, 11:31
 
Fecha de Ingreso: agosto-2013
Ubicación: Cuernavaca
Mensajes: 27
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Consulta SQL no funciona

Ok.

Esto es lo que me envia:

SQL=SELECT * FROM reservaciones WHERE fecha_entrada BETWEEN '2013-09-16' AND '2013-09-18' OR fecha_salida BETWEEN '2013-09-16' AND '2013-09-18' AND id_edificio=19 AND habitacion LIKE '%Hab2%'

Las variables me las toma correctamente
  #7 (permalink)  
Antiguo 31/08/2013, 11:32
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta SQL no funciona

Sigues sin poner atención.

Cita:
Iniciado por pateketrueke Ver Mensaje
Te sugiero que aprendas a depurar tus consultas:

1. Guardas la consulta en una cadena de texto
2. Imprimes la consulta y observas si está bien escrita
3. Si te es posible copiar la consulta y ejecutarla a mano
4. Ejecutar la consulta con PHP y depurar en caso de error
¿Qué parte del punto 3 no entiendes?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #8 (permalink)  
Antiguo 31/08/2013, 11:48
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 SQL no funciona

Cita:
Iniciado por desweb Ver Mensaje
Ok.

Esto es lo que me envia:

SQL=SELECT * FROM reservaciones WHERE fecha_entrada BETWEEN '2013-09-16' AND '2013-09-18' OR fecha_salida BETWEEN '2013-09-16' AND '2013-09-18' AND id_edificio=19 AND habitacion LIKE '%Hab2%'

Las variables me las toma correctamente
Código MySQL:
Ver original
  1. FROM reservaciones
  2. WHERE fecha_entrada BETWEEN '2013-09-16' AND '2013-09-18'
  3.     OR fecha_salida BETWEEN '2013-09-16' AND '2013-09-18'
  4. AND id_edificio=19
  5. AND habitacion LIKE '%Hab2%'
Aquí el problema, a nivel de lógica es que tienes dos grupos de condiciones:
Código SQL:
Ver original
  1. fecha_entrada BETWEEN '2013-09-16' AND '2013-09-18'
Esta es una condición.
Código MySQL:
Ver original
  1. fecha_salida BETWEEN '2013-09-16' AND '2013-09-18'
  2. AND id_edificio=19
  3. AND habitacion LIKE '%Hab2%'
Esta es otra condición.

Es así porque el OR es una disyunción lógica, y "parte" el conjunto en dos, cada una de las cuales puede ser verdad o ambas al mismo tiempo.
Ahora bien, si las condiciones de fecha deben ser una u otra, pero todo lo demás es mandatorio, entonces te faltan los paréntesis:

Código MySQL:
Ver original
  1. FROM reservaciones
  2. WHERE (fecha_entrada BETWEEN '2013-09-16' AND '2013-09-18'
  3.     OR fecha_salida BETWEEN '2013-09-16' AND '2013-09-18')
  4. AND id_edificio=19
  5. AND habitacion LIKE '%Hab2%'
Ahora bien, me hace dudar que exista una habitación que se denomine "Hab2".
¿Es así? ¿Con un "2" en el nombre?

Fuera de eso, como ya te dijo @pateketrueke, prueba esa query en phpMyadmin, y veamos si devuelve datos, y de ser así, mira si los datos son los que esperabas. si no lo son, es que tus condiciones no son correctas.
__________________
¿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 31/08/2013, 11:48
 
Fecha de Ingreso: agosto-2013
Ubicación: Cuernavaca
Mensajes: 27
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Consulta SQL no funciona

Disculpa pero no logro hacer lo que me pides.
De todas formas gracias por la ayuda
  #10 (permalink)  
Antiguo 31/08/2013, 11:50
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 SQL no funciona

¿Qué cosa?
¿Acaso no puedes haer simplemente:
Código PHP:
Ver original
  1. $sql = "SELECT *
  2.    FROM reservaciones
  3.    WHERE (fecha_entrada BETWEEN '".$fecha_in."' AND '".$fecha_out."'
  4.        OR fecha_salida BETWEEN '".$fecha_in."' AND '".$fecha_out."' )
  5.        AND id_edificio=".$id_edificio."
  6.       AND habitacion LIKE '%$habitacion%'";
  7. echo $sql;
y luego copiar lo que te muestre en pantalla y ejecutarlo en phpMyadmin?
¿en serio?
¿No puedes?

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 31/08/2013, 12:04
 
Fecha de Ingreso: agosto-2013
Ubicación: Cuernavaca
Mensajes: 27
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Consulta SQL no funciona

Gracias gnzsoloyo,
Eso era lo que necesitaba. Un poco de explicación ya que solo necesitaba juntar dos consultas que ya sabía que me mandaban los valores que necesitaba.

Y sobre
Cita:
Disculpa pero no logro hacer lo que me pides.
De todas formas gracias por la ayuda
era para pateketrueke ya que no entendía lo que me decía.

Etiquetas: formulario, funcion, mysql, select, sql
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 16:44.