Cita: ¿Que tengo que hacer para que me regrese en una sola consulta los resultados?
Lo primero que tienes que entender es cómo funciona un AND. Si jamás has estudiado lógica propposicional y no has visto lo que se denominan "tablas de verdad", entonces no sabes que un conjunto de proposiciones condicionados con AND (Y)
sólo son verdaderos si todas las proposiciones son verdaderas.
Esto significa que para que un WHERE de múltilples condiciones relacionadas con AND devuelva datos, todas las condiciones puestas en el WHERE deben cumplirse si o sí, todas en el mismo registro dado. Con una sola que no se cumpla al mismo tiempo que las otras, MYSQL no devolverá ese registro.
¿Se entiende la idea?
Bien, lo que tu tienes es esto:
Código MySQL:
Ver original casas.id,
casas.nombre,
casas.metros,
casas.precio,
casas.id_contratante,
casas.foto1,
usuarios.id,
usuarios.tipo
casas,
usuarios
(usuarios.id
=casas.id_contratante
AND usuarios.tipo
!='4' AND casas.vigencia
BETWEEN '".$date90."' AND '".$date."'".$valor.") (usuarios.id
=casas.id_contratante
AND usuarios.tipo
='4' AND casas.vigencia
BETWEEN '".$date15."' AND '".$date."'".$valor.") rand(".$_SESSION['tiempo'].")
Hay algunas cosas a notar:
1) Cuando pones una operación (... AND ...) AND (... AND ...), por transitividad, es exactamente igual que poner ... AND ... AND ... AND ..., con lo que los paréntesis no afectan el resultado.
2) Hay condiciones imposibles, como usuarios.tipo, ya que consultas por igual y diferente, lo cual es una contradicción. O es igual a 4 o es diferente de cuatro. No puede ser ambas cosas al mismo tiempo.
4) Estas usando condiciones en el WHERE que corresponden al JOIN. En tu caso corresponde poner ambas tablas en un INNER JOIN.
4) Lo que las lógicas de consulta buscadas es en realidad la comparación de fechas, pero para hacerla correctamente ambos BETWEEN deben ir con OR.
Tu consulta debería escribirse así (usando alias donde se debe y un correcto JOIN):
Código MySQL:
Ver original C.id,
C.nombre,
C.metros,
C.precio,
C.id_contratante,
C.foto1,
U.id,
U.tipo
(U.id
!= 4 AND C.vigencia
BETWEEN '".$date90."' AND '".$date."'".$valor.") (U.id
= 4 AND C.vigencia
BETWEEN '".$date15."' AND '".$date."'".$valor.") rand(".$_SESSION['tiempo'].")