Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

natalia fernandes

busca muito avancada!

Recommended Posts

Ola amigos,

 

estou a tentar fazer uma busca dinamica com varias tabelas, mas para simplificar vou falar apenas daquelas que interessam.

 

É o seguinte: eu tenho vários alojamentos numa tabela chamada t_alojamentos e tenho as reservas feitas para esses alojamentos numa tabela chamada t_reservas.

 

Quando um cliente vai fazer uma busca, pode faze-la por alojamento e/ou por reservas.

 

O problema é que quando eu faço uma busca para determinadas caracteristicas do alojamento e para uma determinada data vinda da tabela t_reserva só me devolve alojamentos que já tenham registos na tabela reservas. Ou seja todos os alojamentos que nunca foram reservados nunca vao aparecer!

 

 

Eu tenho o seguinte:

 

SELECT distinct t_alojamentos.* FROM t_alojamentos, t_reservas WHERE t_reservas.val=1 AND t_moradias.id_moradia=t_reservas.alojamento AND t_reservas.moradia=1 AND (('$data_inicio' NOT BETWEEN 't_reservas.data_inicio' AND 't_reservas.data_fim') and ('$data_fim' NOT BETWEEN 't_reservas.data_inicio' AND 't_reservas.data_fim'));

 

Existe maneira de resolver?

 

Desde já obrigada pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi,

 

muda esta sua consulta utilizando o LEFT JOIN, dá uma olhada neste manual do mysql http://dev.mysql.com/doc/refman/5.0/en/lef...timization.html e aqui http://dev.mysql.com/doc/refman/5.0/en/join.html.

 

usando corretamente, retornará os alojamentos mesmo que ainda não tenham sido reservados.

 

resumidamente sua consulta ficaria algo do tipo:

SELECT distinct t_alojamentos.* FROM t_alojamentos LEFT JOIN t_reservas ON t_moradias.id_moradia = t_reservas.alojamento WHERE ...

talvez precise incrementar um pouco mais, mas o que você precisa fazer é o bom uso do LEFT JOIN.

 

se não me engano, tem diferença entre você colocar as 'condições' no ON do LEFT JOIN e no WHERE. Se por as condições referentes a tabela t_reservas no WHERE, é bem provável que os alojamentos que ainda não tiveram reserva não apareçam. se isto acontecer, tenta por as condições no ON, tipo:

LEFT JOIN t_reservas ON t_moradias.id_moradia = t_reservas.alojamento AND t_reservas.campo e por aí vai

depois pode complementar no WHERE as demais condições que não tenham referência a t_reservas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.