Query SQL - duvida sobre condicao

6 respostas
F

Boa Tarde a todos…

estou com uma duvida em uma condicao numa query que é a seguinte:

eu coloquei uma variavel, nao obrigatoria… que pede para o usuario digitar (0) NAO e (1) SIM ou não entra com valor algum…
%

$ST={SOB CUSTODIA?;;N;}@ SIM (1) | NAO (0)
%

ai coloquei uma condicao para analizar esse campo…

WHERE

status=[$ST]

a select roda… se a pessoa digitar 0 ou 1, mas se ela não digita nd… num roda…

da erro de syntax… e eu queria que se a pessoa não digitasse nd…

ele me trouxesse 0 e 1… listasse tudo…

quem puder me ajudar… eu agradesso…

vlw

.

6 Respostas

xjunior

primeiramente, coloque códigos dentro da tag code, ok?

segundo, poste sua query para que possamos analisar o erro de syntaxe que vc está falando, blz?

juliofsn

Isso provavelmente ocorre, porque quando o usuário não digita nada, o “WHERE” fica quebrado, assim: "WHERE status = ", como não tem nada para comparar, dá erro de sintaxe. Você tem que pensar numa lógica em que, quando o usuário não digitar nada, você some com essa condição.

xjunior

realmente, quando não digita nada fica quebrado o seu sql

F

essa é a select… eu vi que meu problema é o seguinte…
como o colega citou … quando minha select volta null… ele não tem como igualar a nd…
nesse caso as respostas possiveis sao 0 e 1… eu precisaria… pegar os 2 resultados se fosse null…

mas num sei como fazer isso… se algum puder me ajudar… coloco outra duvida relacionada… se eu tivesse

as opcoes 1, 2, 3, 4, 5… e eu quissesse 1, 3,4… por exemplo… tipo um IN… tipo:

escolha de 1 a 5… se nulll retorne (1,3,4)… é tipow esse select tb…

%vars

$DI={:d:DATA INICIAL;;S;}

$DF={:d:DATA FINAL;;S;}

$CT={SOB CUSTODIA?;;N;}@   SIM (1)    |   NAO (0)

%

SELECT
@var:=0

SELECT

@var:=@var+1                            AS      Item,

CONCAT(cpdue.storeno)                   AS      Loja,

CONCAT(<a href="http://custp.no">custp.no</a>," ",<a href="http://custp.name">custp.name</a>)         AS      Cliente,

(cpdue.checkno*1000)                    AS      Cheque___,

DATE_FORMAT(cpdue.postdate,’%d/%m/%y’)  AS      Vencto,

cpdue.amt                               AS      _____Valor,

if(cpdue.bits=0,‘NAO’,‘SIM’)            AS      Custodia

FROM

sqldados.cpdue

LEFT JOIN

sqldados.custp ON (<a href="http://custp.no">custp.no</a> = cpdue.custno)

LEFT JOIN

sqldados.store ON (<a href="http://store.no">store.no</a> = custp.storeno)

WHERE

cpdue.postdate BETWEEN [$DI] AND [$DF] AND

cpdue.status=[$CT]

ORDER BY

cpdue.postdate,cpdue.storeno,<a href="http://custp.name">custp.name</a>
juliofsn

Qual o banco de dados que você usa? Pode ser que ele já possua funções ou estruturas que permitem resolver esse problema.

Procure ver se existe o CASE (http://dev.mysql.com/doc/refman/5.0/en/case-statement.html), que eu acho que seria o mais adequado para resolver seu problema, apesar dessa documentação ser do MySQL, ele existe em vários outros bancos (sei que tem no Postgres e no SQLServer).

F

eu uso mysql…

e tentei com case… mas ou eu fiz errado ou nao atende…

Criado 11 de fevereiro de 2010
Ultima resposta 11 de fev. de 2010
Respostas 6
Participantes 3