Ir para conteúdo
Fórum Script Brasil
  • 0

SELECT com AND & OR


-= NemesiS =-

Pergunta

Olá pessoal do Scriptbrasil, estou com problemas ao pesquisar um imóvel em meu sistema,

Tenho as segunites tabelas:

-----------------------------------------------------------------

tb_imoveisdados

-id

-hashImovel

-tipoImovel

-tipoAtivo

alguns valores de ex:

1 | 2ihs | 1 | 1

2 | 7yhd | 2 | 1

3 | 34hs | 2 | 1

4 | 45fs | 1 | 1

-----------------------------------------------------------------

tb_tipodescricoes

-id

-txtNome

alguns valores de ex:

1 | Dormitorios

2 | Suites

3 | Garagens

-----------------------------------------------------------------

tb_imoveisdescricoes

-id

-hashImovel

-tipoDescricao

-numDescricao

alguns valores de ex:

1 | 2ihs | 1 | 3

2 | 2ihs | 2 | 2

3 | 45fs | 1 | 2

4 | 45fs | 2 | 1

-----------------------------------------------------------------

Tenho que buscar um imóvel com as seguintes descrições:

3, dormitórios e 2, suites, no caso teria que me retornar o imóvel de ID:1 que possui o hash:2ihs

Mas ele não me retornar nada, qual seria o erro do meu SQL ?

SELECT 

ID.id, 
ID.hashImovel
TI.txtNome AS tipoImovel, 
ID.tipoAtivo 

FROM 

tb_imoveisdados ID 

LEFT JOIN tb_tipoimoveis     TI     ON TI.id         = ID.tipoImovel 

LEFT JOIN tb_imoveisdescricoes     IDE     ON IDE.hashImovel     = ID.hashImovel 
LEFT JOIN tb_tipodescricoes     TD     ON TD.id         = IDE.tipoDescricao 

LEFT JOIN tb_imoveisatributos     IA     ON IA.hashImovel     = ID.hashImovel 

WHERE 

ID.tipoAtivo = '1' AND ((IDE.tipoDescricao = '1' AND IDE.numDescricao = '3') OR (IDE.tipoDescricao = '2' AND IDE.numDescricao = '2')) 

GROUP BY ID.hashImovel ORDER BY ID.id

Me ajudem por favor.

Abraços.

Editado por quintelab
Removido [AJUDA] do Título
Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Oi, NemesiS

Faltou a tabela tb_tipoimoveis Envie um exemplo dela para que eu possa analisar e dizer o que realmente pertence a consulta que você quer.

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, NemesiS

Faltou a tabela tb_tipoimoveis Envie um exemplo dela para que eu possa analisar e dizer o que realmente pertence a consulta que você quer.

Independente do que falei acima a resposta pode ser conseguida assim:

SELECT A.id, A.hashImovel, B.txtNome, C.numDescricao
FROM tb_imoveisdados A 
INNER JOIN tb_imoveisdescricoes C ON C.hashImovel = A.hashImovel
INNER JOIN tb_tipodescricoes B ON B.id = C.tipoDescricao
WHERE (tipoDescricao = 1 AND numDescricao = 3) OR (tipoDescricao = 2 AND numDescricao = 2);

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, até aqui consegui realizar a pesquisa normalmente, o problema é que se usar o OR em cada cado de descrição o OR anula a condição anterior caso encontre algun resultado,

tentei colocar o AND, mas com END ele sempre me retorna nada.

WHERE (tipoDescricao = 1 AND numDescricao = 3) OR (tipoDescricao = 2 AND numDescricao = 2);
WHERE (tipoDescricao = 1 AND numDescricao = 3) AND (tipoDescricao = 2 AND numDescricao = 2);

Oque acontece é que ele varre todos os imoveis a procura de 3 dormitorios e após isto ele varre todos os imoveis em busca de 2 suites, oque acntece é que se ele encontrar um imóvel com 2 suites e 1 dormitorios ele também retorna, sendo que o OR faz ele desconsiderar a regra dos 3 dormitorios, e isto não poderia acontecer.

Por favor me ajudem, já não sei mais oque fazer.

Abraços a todos.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...