Comunidad de diseño web y desarrollo en internet online

Consulta MYSQL mala :S

Citar            
MensajeEscrito el 09 Ago 2013 06:31 am
Hola Naz a todos
quisiera que me ayudaran con lo siguiente, que lo escribo de esa manera siguiendo un consejo en los foros de microsoft(http://social.msdn.microsoft.com/Forums/es-ES/31613288-118c-4b18-b211-de39742f101d/ayudanos-a-ayudarte-gua-bsica-de-consejos-para-formular-preguntas#31613288-118c-4b18-b211-de39742f101d).....

Objetivo: que muestre las habitaciones ocupadas entre las fechas $entrada y $salida.

Pasos que llevaron a reproducir el error: la consulta entre fechas no es la indicada, no esta diseñada correctamente.

Resultados actuales: no muestra lo que pide.

Entorno: lenguaje php y base de datos mysql.

Se habla de dos calendarios diferentes: huespedes y reservaciones, en los cuales consultamos los siguientes campos: entrada y salida en ambas tablas (huespedes y reservaciones)...
Tomando en cuenta los siguientes datos como ejemplo:
CLIENTE FECHA
huesped 1: 08 - 11 agosto
*reservacion 2: 10 - 13 agosto
huesped 3: 08 - 13 agosto
reservacion 4: 30 ags - 04 sept

(el asterisco es el ejemplo de la consulta reservacion "2")

- la consulta que tengo ahorita es la siguiente:

Código MySQL :

SELECT * FROM huespedes JOIN reservaciones ON huespedes.id_hab=reservaciones.id_hab WHERE (huespedes.entrada >= '2013-08-10' AND huespedes.salida <= '2013-08-10') AND (reservaciones.entrada <= '2013-08-10' AND reservaciones.salida >= '2013-08-13') AND entregado='0' AND reservaciones.del='0' AND huespedes.del='0' ; 


mi problema parece que es algo de logica pero se me ha complicado vastante :S

un saludo y gracias de antemano
no saben cuanto se los agradeseria U.u

Por M3T4LX

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Ago 2013 10:54 am
es que la construcción de la sql aún cuanto correcta en sintaxis no tiene sentido:

huespedes.entrada >= '2013-08-10' AND huespedes.salida <= '2013-08-10'

eso es lo mismo que huespedes.entrada=fecha AND huespedes.salida=fecha

la verdad que no me queda nada claro que es lo que quiere hacer. Podría escribir la consulta que quiere hacer en vez de en SQL en pseudo código?? es decir en castellano.

Por kaladrian

9 de clabLevel



 

Diseño páginas web

firefox
Citar            
MensajeEscrito el 09 Ago 2013 12:49 pm
Me parece entender lo que quieres hacer: Encontrar las coincidencias entre las estadías de los huéspedes y las reservaciones hechas.

Pero como ha señalado [/b]kaladrian[/b], la consulta que has hecho no tiene mucho sentido. Creo que lo que necesitas es usar la función BETWEEN de MySQL.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 Ago 2013 04:32 am
Gracias por contestar, pues tengo esta funcion

Código PHP :

   function consultar_disponibilidad ($llegada, $salida, $hab = NULL)
   {
      if($this->con->conectar()==true && $this->login->logged() && $this->activite())
      {
         $today      =   date('Y-m-d');
         $time      =   date('H:i:s');
         
         //BUSCA OCUPADOS ENTRE ESAS FECHAS
         $sql_huespedes_check            =   "SELECT * FROM huespedes JOIN reservaciones ON huespedes.id_hab=reservaciones.id_hab  WHERE (huespedes.entrada >= '$llegada' AND huespedes.salida <= '$llegada') AND (reservaciones.entrada <= '$llegada' AND reservaciones.salida >= '$salida') AND entregado='0' AND reservaciones.del='0' AND huespedes.del='0' ; ";
         $this->firephp->info($sql_huespedes_check, 'checa ocupados');
         $query_huespedes_check         =   mysql_query($sql_huespedes_check);
         $num_huespedes                  =   mysql_num_rows($query_huespedes_check);
         
         $i=0;
         while($huespedes_check         =   mysql_fetch_array($query_huespedes_check))
         {
            if($num_huespedes >= 1)
            {   
               $ocupadoslist[$i]   =   $huespedes_check[id_hab];
               $i++;
            }
         }
         
         $count_ocupados   =   count($ocupadoslist);
         
         if($count_ocupados >= 1)
         {
            //COMPARA OCUPADOS
            $cleanlist            =   array_unique ($ocupadoslist); //ELIMINA DUPLICADOS
            $cleanlist            =   array_values ($cleanlist);
            $num_ocupados   =   count($cleanlist);
            
            $queryr2   = " WHERE ";
            $v=0;
            while($row = $cleanlist[$v])
            {
               if($v>=0)   $queryr2   .= " habitaciones.id != ".$row." ";
               if($v!=$num_ocupados-1)   $queryr2   .= "AND ";
               $v++;
            }
         }
         //REGRESA LA CONSULTA SIN NINGUNO DE LOS RESULTADOS DEJANDO SOLO LOS DISPONIBLES
         $sql_querySEGUNDA   =   "SELECT * FROM categorias JOIN habitaciones on categorias.id=habitaciones.id_cat $queryr2  ORDER BY nombre, num ASC;";
         $this->firephp->error($sql_querySEGUNDA, 'final');
         return   mysql_query($sql_querySEGUNDA);
         
      }
   }

kaladrian pues las fechas no se en que orden puedo ponerlas, no se he podido lograrlo las variables en la funcion son "$entrada" y "$salida"..
Lo que realmente quiero es que vea cuales habitaciones estan ocupadas para poder arrojar resto..

DriverOp estoy checando lo del BETWEEN gracias, y creo que si es a lo que me refiero xD
espero me puedan ayudar.. :)

saludos

Por M3T4LX

13 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.