Re:Ajuda com o SELECT - RESOLVIDO

Boas…
tenho um aplicativo onde tenho de seleccionar dados de outra tabela com base de variaveis da tabela que estou posicionado.
1º tenho uma tabela de clientes com um grid onde no evento on record activo as seguintes variaveis globais:
$ywnquartos = {nquartos};
sc_set_global($ywnquartos);

$ywtipoimovel = {tipoimovel};
sc_set_global($ywtipoimovel);

$ywconcelho = {concelho};
sc_set_global($ywconcelho);

$ywxpmaximo = {pmaximo};
sc_set_global($ywxpmaximo);

$ywobjectivo = {objectivo};
sc_set_global($ywobjectivo);

$ywpreferencias = {preferencia};
sc_set_global($ywpreferencias);

nesse grid tenho numa coluna um campo tipo HTML onde abro a tabela que pretendo mostrar os dados com base nas variaveis globais atras descritas

o select dessa tabela esta assim:
SELECT
numero,
partilha,
vendedor,
director,
data,
situacaoimovel,
dias,
estado,
tiponegocio,
tipoimovel,
proprietario,
refbanco,
refinterna,
nomeproprietario,
contactos,
email01,
observcliente,
distrito,
concelho,
freguesia,
morada,
preco,
anuncio_titulo,
anuncio_texto,
anuncio_link,
tipologia2,
area_coberta,
area_descoberta,
garagem,
foto_01,
nquartos,
negociocliente
FROM
imoveis where concelho=’[ywconcelho]’ and tipoimovel=’[ywtipoimovel]’ and situacaoimovel=‘DISPONIVEL’ and partilha=‘TODOS’ and ‘[ywobjectivo]’=negociocliente and nquartos>=’[ywnquartos]’ and preco<=[ywxpmaximo] ORDER BY preco DESC

SUPOSTAMENTE é isso que não entendo deveria aparecer so regists com o numero de quartos superior ao estipulado na variavel global e com o preço inferior.
ACONTECE que a maior parte das vezes se o cliente pretende um T4=4quartos (campo indicado na tabela do tipo int) quando lista os imoveis aparecem imoveis com 3 e 2 quartos.
O que estou a fazer mal?


img.jpg

Testou um SELECT DISTINCT?

Olá… sim ja testei e da o mesmo.
De qualquer forma anexo a imagem com o resultado visto o anterior não estar correcto relativamente aos preços.


Image2.jpg

Faz o seguinte, coloca em modo DEBUG e da um print, queria ver como esta vindo esses parâmetros no select! Já que esta usando tantos “And”…

ai vai… masde outro registo, porque não posso fazer debug no sistema que esta online…


Image6.jpg

Rapaz, não vejo erro com relação ao select, ele esta trazendo o que se esta pedindo, por exemplo veja no nquartos ta pedindo pra trazer números maior ou igual ao escolhido, isso vai com relação aos preços de cada. Você quer que apareça apenas o quarto escolhido?

Não!
pretendo que o valor seja inferior ao pedido pelo cliente, e se houver imoveis com tipologia superior a pedida mas com esse valor do cliente apareça…

Cara, tenta fazer uma separação usando ( ), tipo;

Algo mais ou menos assim

WHERE concelho = '[ywconcelho]'  and (nquartos >= '[ywnquartos]' and preco <= [ywxpmaximo] );

Fazendo assim ele analisará oque está dentro do ( ) e retornar um true para o parentese inteiro.

Não faz efeito… os ()… veja o anexo… lista os inferiores ao preço pedido pelo cliente mas lista outros imoveis com outros quartos… neste caso so seria maior ou igual a 4


Image8.jpg

Herberto,

Podes nos mostrar a estrutura dessa tabela?

TABELA de IMOVEIS:
CREATE TABLE imoveis (
numero int(6) NOT NULL,
partilha varchar(10) NOT NULL,
vendedor varchar(50) NOT NULL,
director varchar(50) NOT NULL,
data date NOT NULL,
situacaoimovel varchar(15) NOT NULL,
dias int(6) NOT NULL,
estado varchar(15) NOT NULL,
tiponegocio varchar(15) NOT NULL,
negociocliente varchar(15) NOT NULL,
tipoimovel varchar(20) NOT NULL,
proprietario varchar(20) NOT NULL,
refbanco varchar(15) NOT NULL,
refinterna varchar(15) NOT NULL,
nomeproprietario varchar(50) NOT NULL,
contactos varchar(40) NOT NULL,
email01 varchar(65) NOT NULL,
observcliente text NOT NULL,
distrito varchar(40) NOT NULL,
concelho varchar(40) NOT NULL,
freguesia varchar(50) NOT NULL,
morada text NOT NULL,
preco decimal(10,0) NOT NULL,
anuncio_titulo varchar(100) NOT NULL,
anuncio_texto text NOT NULL,
anuncio_link varchar(200) NOT NULL,
tipologia2 varchar(10) NOT NULL,
area_coberta decimal(10,0) NOT NULL,
area_descoberta decimal(10,0) NOT NULL,
garagem varchar(30) NOT NULL,
obs_internas text NOT NULL,
foto_01 varchar(200) NOT NULL,
foto_02 varchar(200) NOT NULL,
foto_03 varchar(200) NOT NULL,
foto_04 varchar(200) NOT NULL,
foto_05 varchar(200) NOT NULL,
foto_06 varchar(200) NOT NULL,
valorprestacao varchar(30) NOT NULL,
repetidos varchar(100) NOT NULL,
destacar varchar(1) NOT NULL,
nquartos int(2) NOT NULL,
PRIMARY KEY (numero)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

TABELA de CLIENTES:
CREATE TABLE clientes (
numero int(10) NOT NULL,
data date NOT NULL,
estado varchar(20) NOT NULL,
diasestado int(4) NOT NULL,
proveniencia varchar(30) NOT NULL,
vendedor varchar(50) NOT NULL,
nome varchar(50) NOT NULL,
telef01 varchar(15) NOT NULL,
telef02 varchar(15) NOT NULL,
telef03 varchar(15) NOT NULL,
email01 varchar(80) NOT NULL,
email02 varchar(80) NOT NULL,
nutilizador int(6) NOT NULL,
utilizador varchar(40) NOT NULL,
observacoes text NOT NULL,
director varchar(50) NOT NULL,
qrcode text NOT NULL,
objectivo varchar(25) NOT NULL,
tipoimovel text NOT NULL,
tipologia text NOT NULL,
nquartos int(2) NOT NULL,
estadoimovel text NOT NULL,
pminimo int(7) NOT NULL,
pmaximo int(7) NOT NULL,
anomes varchar(15) NOT NULL,
diasemana varchar(10) NOT NULL,
distrito text NOT NULL,
concelho text NOT NULL,
freguesia text NOT NULL,
encerramento date NOT NULL,
proprietario varchar(15) NOT NULL,
valornegocio int(10) NOT NULL,
valorcomissao int(8) NOT NULL,
obs2 text NOT NULL,
datafecho date NOT NULL,
PRIMARY KEY (numero)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Olá…
verificou-se passados alguns dias de utilização que para os dados recentes, a coisa esta a funcionar…
Resumindo, por qualquer razão dados registados anteriormente a esta opção não funciona correctamente, após a introdução dos dados está OK!..
Vamos lá perceber porquê?..