Ir para conteúdo

POWERED BY:

Arquivado

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

Pedro Ramos_142866

COmparação com mais de um item de uma tabela

Recommended Posts

Galera, tenho uma query, que não retorna nada por causa de alguma inconsistência nas 2 linhas negritadas da consulta lá em baixo

 

em 3 tabelas

1 - imoveis propriamente dita

 

2 - tabela da nomenclatura dos itens do perfil do imovel

SELECT * FROM `imoveis_det`

1 Área total

2 Área Construida

3 Quartos

4 Garagens

5 Banheiros

 

 

3 - tabela de armazenamento do codigo do imovel do codigo do item de perfil e de seu valor

SELECT * FROM `imoveis_det_imo`

codigo_imo codigo_item valor

1 2 150m²

1 1 500m²

1 3 1

imovei 1 tem 150m2 de Área construida
imovei 1 tem 500m2 de Área total
imovei 1 tem 1 Quartos

 

 

 

 

 

o que acontece é que

id.codigo_item3 = (quantidade de quartos que o imovel tem de ter) => 1

id.codigo_item1 = (quantidade de m2 que o imovel tem de ter) => entre 1 e 5000m2

 

 

SELECT * FROM imoveis i, imoveis_det_imo id
where
id.codigo_imo = i.codigo AND
i.codigo_bai=3 AND i.codigo_rua=1
AND i.codigo_cat=6 AND
i.situacao='Construindo'
AND i.codigo_fin=1 AND
id.codigo_item=3 AND id.valor=1 AND
id.codigo_item=1 AND id.valor BETWEEN 1 AND 5000 AND
i.valor BETWEEN 1 AND 1000000
ORDER BY codigo_uf, codigo_cid, codigo_bai, codigo_rua
Agora a dúvida: Como eu posso fazer essa query, fazendo várias comparações nessa mesma tabela "imoveis_det_imo"?
A necessidade é de saber de um imóvel por ex com
4 quartos
2 garagens e
3 banheiros por exemplo e que tenha ainda
m2 de area construida entre 120 e 400 e
de area total entre 500 e 720
obrigado ao gafanhoto-sam que me ajudar nessa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buenas tchê.

 

O que ocorre é que uma consulta SQL aplica todos os critérios do WHERE em cada linha de registro. Logo é impossível um registro ter 2 informações diferentes no mesmo campo.

Sugiro fazer o seguinte (trocando só o negrito):

((id.codigo_item=3 AND id.valor=1) OR 
(id.codigo_item=1 AND id.valor BETWEEN 1 AND 5000))
AND

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae Marlon, valeu , mas tem a necessida de buscar por todos e quaisquer itens que adicionais nessa mesma tabela, sendo assim já resolvi meu problema e abaixo está a solução proposta por um professor meu

 

DIPLICAR A NOMENCLATURA COM APELIDOS E A PESQUISA NA MESMA TABELA

 

 

SELECT *
FROM imoveis i, imoveis_det_imo id1, imoveis_det_imo id2, imoveis_det_imo id3, imoveis_det_imo id4, imoveis_det_imo id5
where
i.codigo_bai=3 AND
i.codigo_rua=1 AND
i.codigo_cat=6 AND
i.situacao='Construindo' AND
i.codigo_fin=1 AND
(i.valor BETWEEN 1 AND 132479) AND
i.codigo = id1.codigo_imo AND
i.codigo = id2.codigo_imo AND
i.codigo = id3.codigo_imo AND
i.codigo = id4.codigo_imo AND
i.codigo = id5.codigo_imo AND
id1.codigo_item=1 AND (id1.valor BETWEEN 1 AND 2778) AND
id2.codigo_item=3 AND id2.valor=1 AND
id3.codigo_item=3 AND id3.valor=1 AND
id4.codigo_item=4 AND id4.valor=1 AND
id5.codigo_item=5 AND id5.valor=1
ORDER BY codigo_uf, codigo_cid, codigo_bai, codigo_rua

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.