myql nao funciona nao da o retorno esperado

MySQL

23/07/2010


ola pessoal, tenho uma tabela que só tem esses 4 registros
campo: tipo_pagamento - registros: mastercard , diners , cheque , cheque
no campo cod_status: - registros 1 , 1 , 1, 2
no campo cpf os dois sao diferentes.

se eu faco a consulta assim:
<% pagtorecebido = "select count(distinct cliente_cpf) as pagto_recebido from retorno_pagto  where tipo_pagamento = 'VISA' or tipo_pagamento = 'Mastercard' or tipo_pagamento = 'American Express' or tipo_pagamento = 'AURA' or tipo_pagamento = 'Diners' or tipo_pagamento = 'Hipercard' and cod_status = [u]'1'[/u]" %>
me retorna o valor 2

e se eu faço a conslta mudando o cod_status para [b]'0'[/b] ou [b]'2'[/b] ou [b]'3'[/b] continua dando o resultado 2
sendo que somente tem esses dois registros.

se eu faco a consulta mais simples:
<%recebido = "select count(distinct cliente_cpf) as cetap from retorno_pagto where tipo_pagamento = 'cheque' and cod_status = '1'"%>

me retorna os valores corretos da contagem, mesmo eu mudando o cod_status

se alguem puder me ajudar eu agradeço...
Claudio Martinez

Claudio Martinez

Curtidas 0

Respostas

Gilson Sousa

Gilson Sousa

23/07/2010

Olá...uma causa de sua primeira consulta nao gerar o resultado esperado pode ser o  uso dos operadores OR e AND. Quando usados várias vezes, é aconselhável o uso de parênteses para que a condição seja realizada corretamente, pois a condição OR é a primeira a ser comparada nesta consulta, depois o AND. Exemplo:   <% pagtorecebido = "select count(distinct cliente_cpf) as pagto_recebido from retorno_pagto  where ( tipo_pagamento = 'VISA' or tipo_pagamento = 'Mastercard' or tipo_pagamento = 'American Express' or tipo_pagamento = 'AURA' or tipo_pagamento = 'Diners' or tipo_pagamento = 'Hipercard' ) and cod_status = [u]'1'[/u]" %>
  Outra opção é o IN, que substitui a combinação de vários OR. Exemplo:   <% pagtorecebido = "select count(distinct cliente_cpf) as pagto_recebido from retorno_pagto  where  tipo_pagamento in ( 'VISA' , 'Mastercard' ,  'American Express'  , 'AURA' ,  'Diners' , 'Hipercard'  ) and cod_status = [u]'1'[/u]" %>
Tenta usar desta forma, pode ser isso. Abraço.
GOSTEI 0
Claudio Martinez

Claudio Martinez

23/07/2010

ok amigo, entendi onde estava o problema, usei os parenteses e resolveu.


brigadao

abraços
GOSTEI 0
POSTAR