Comunidad de diseño web y desarrollo en internet online

Juntar consultas Between y Join

Citar            
MensajeEscrito el 12 Ago 2013 11:58 pm
Buenas traigo un problemilla con una consulta agradeseria mucho que me ayuden a resolver mi duda y problema....
Tube un post anterior con algo de exito a mi pregunta pero me resulto otra duda U.U
tengo esta consulta que esta trabajando bien como yo quiero:

Código MySQL :

SELECT * FROM huespedes 
WHERE (DATE(salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND del='0' ;


y la misma pero con otra tabla:

Código MySQL :

SELECT * FROM reservaciones 
WHERE (DATE(salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND del='0' ;


y quedaria algo asi:

Código MySQL :

SELECT * FROM huespedes JOIN reservaciones ON huespedes.id_hab=reservaciones.id_hab 
WHERE (DATE(huespedes.salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(reservaciones.entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND entregado='0' AND reservaciones.del='0' AND huespedes.del='0' ;


y pues arroja resultados pero no los que debia.... al parecer veo que es un problema en JOIN "reservaciones ON huespedes.id_hab=reservaciones.id_hab" que me arroja id_habs obtenidas pero no toma en cuenta las condiciones U.U

como por ejemplo

Código :

-------------------------+---------+-----------+------+--------+-----------+--------+------------+------------+-------------+----------+----------+------------+---------------------+-----------+-----+
| id | nombre         | apellidos    | email                | id_hab | entrada    | salida     | anterior | personas | comentarios | datetime            | reservacion | del | 

id | nombre   | apellidos | email          | id_hab | entrada    | salida     | comentarios | res_code | deposito | confirmado | datetime            | entregado | del |
-------------------------+---------+-----------+------+--------+-----------+--------+------------+------------+-------------+----------+----------+------------+---------------------+-----------+-----+
|  3 | Patricia       | Contreras    | [email protected]  |       4 | 2013-08-12 | 2013-08-14 |        0 |        0 |             | 2013-08-12 02:26:07 |           1 |   0 
|  3 | Patricia | Contreras | [email protected] | fijo    |       4 | 2013-08-12 | 2013-08-14 |          | JKB4MJ   | 500      |          1 | 2013-08-12 02:00:59 |         1 |   0 |
|  2 | Armando Alexis | Herra Cortez | [email protected] |      2 | 2013-08-08 | 2013-08-11 |        0 |        1 | ._.         | 2013-08-08 01:07:05 |           0 |   0 
|  4 | Aley     | Fila      | [email protected]      |      2 | 2013-08-13 | 2013-08-15 |             | UEFV1W   | 500      |          1 | 2013-08-12 02:31:44 |         0 |   0 |
---------+-----------+------+--------+-----------+--------+------------+------------+-------------+----------+----------+------------+---------------------+-----------+-----+


donde el registro 2 no tiene que hacer ahi U.U

que es lo que esoty haciendo mal o como lo soluciono?

Gracias

Por M3T4LX

13 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Ago 2013 03:36 am
trata de usar parentesis por que hacer
1==1 OR 2==2 AND 3==3
no es lo mismo que
(1==1 OR 2==2) AND 3==3

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Ago 2013 02:57 pm
Me pregunto si (dado que los campos se llaman igual) no valdría algunas de estas opciones:

Código MySQL :

SELECT * FROM reservaciones, huespedes
WHERE DATE(salida) OR DATE(entrada) 
BETWEEN DATE '2013-08-12' AND DATE '2013-08-14'
AND del='0' ;


o distinguiendo en el WHERE la estructura de búsqueda de modo que sea "tablas.campos" para que no dé fallo y busque en cada momento en su precisa tabla...

Código MySQL :

SELECT * FROM reservaciones, huespedes
WHERE DATE(reservaciones.salida) OR DATE(reservaciones.entrada) 
OR DATE(huespedes.salida) OR DATE(huespedes.entrada) 
BETWEEN DATE '2013-08-12' AND DATE '2013-08-14'
AND del='0' ;


o por si acaso, usando además de lo indicado en el anterior ejemplo, en el SELECT, sustituir la coma por un AND para 'concatenar' (el OR no valdria porque usaría o una o otra tabla, pero no las 2)

Código MySQL :

SELECT * FROM reservaciones AND huespedes
WHERE DATE(reservaciones.salida) OR DATE(reservaciones.entrada) 
OR DATE(huespedes.salida) OR DATE(huespedes.entrada) 
BETWEEN DATE '2013-08-12' AND DATE '2013-08-14'
AND del='0' ;


o incluso antes de usar JOIN (JOIN= que si no me equivoco es una subconsulta que trabaja sólo con los resultados obtenidos de la primera consulta, para realizar una subconsulta), intentar hacer esto otro... METER las 2 consultas iniciales que dices entre paréntesis y unirlas con un AND, pero vamos, si ninguno de los anteriores ejemplos resultan porque creo que son mas 'cortos'

Código MySQL :

(SELECT * FROM huespedes 
WHERE (DATE(salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND del='0' ) 
AND (SELECT * FROM reservaciones 
WHERE (DATE(salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND del='0' );

Por pitger

Claber

201 de clabLevel



Genero:Masculino  

Cáceres

firefox

 

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