Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou desenvolvendo uma pagina onde conterá um campo de busca de data:
DE: XX/XX/XXXX
ATÉ: XX/XX/XXXX
A tabela onde estou pesquisando tem 2 campos de data, pois é um sistema de BOLETO, então tem 2 parcelas, uma data de vencimento para cada uma.
A minha busca visa pegar o VALOR TOTAL de todas as parcelas do CLIENTE = 1 e onde a data que ele digitou para pesquisa esteja entre a data do campo data da parcela no Banco de Dados.
A consulta é essa:
SELECT SUM(creditos_valor_total) AS VALOR_TOTAL FROM creditos WHERE creditos_id_cliente = 1 AND
creditos_data_vencimento_parcela_1 >= '2012-01-01' AND creditos_data_vencimento_parcela_1 <= '2012-12-22' OR
creditos_data_vencimento_parcela_2 >= '2012-01-01' AND creditos_data_vencimento_parcela_2 <= '2012-12-22';
Só que, NOTE que a primeira condição que deverá ser tratada como prioridade é onde ele exibe as parcelas do cliente id = 1. Depois uso o AND para pegar as datas DE-ATE.
O Erro acontece quando eu uso o OR para fazer a verificação da data 1, 2 ....
Aqui eu disse que tenho 2 parcelas, mais como exemplo de solução, pois na verdade são 36 campos de parcelas...
O que posso fazer para forçar sempre ele a pegar o cliente_id = 1 ???
Obrigado
Segue imagem da estrutura da tabela, o que não aparecer no final é igual as anteriores, porém vai até o 36.
/applications/core/interface/imageproxy/imageproxy.php?img=http://timaxe.com.br/uploads/mysql.jpg&key=74211db62a2a463634597bd639d1c07853ffb8133efd37abf811bbbd5e76aed5" alt="mysql.jpg" />
Precisa mesmo de 36 colunas?
Já tentou com "1" coluna? E dar o select no periodo?
creditos_id
creditos_id_cliente
creditos_nro_da_parcela <-----
creditos_data_vencimento
creditos_valor_parcela
creditos_status_parcela
>
Segue imagem da estrutura da tabela, o que não aparecer no final é igual as anteriores, porém vai até o 36.
/applications/core/interface/imageproxy/imageproxy.php?img=http://timaxe.com.br/uploads/mysql.jpg&key=74211db62a2a463634597bd639d1c07853ffb8133efd37abf811bbbd5e76aed5" alt="mysql.jpg" />
Cara já tentou trocar esse OR por AND???
Acho que vai funcionar!
Dei uma melhorada no select para facilitar a visualização do problema, acredito que o problema esta no OR.
Porem tenho duvidas... rsrsrs
SELECT SUM(creditos_valor_total) AS VALOR_TOTAL FROM creditos WHERE creditos_id_cliente = 1
AND
creditos_data_vencimento_parcela_1 BETWEEN '2012-01-01' AND '2012-12-22'
AND -- OR ou AND??? Fiquei na duvida agora... como não tenho como testar aqui...Talvez alquem consiga ajudar
creditos_data_vencimento_parcela_2 BETWEEN '2012-01-01' AND '2012-12-22'
O problema é justamente no OR, pois ao meu ver quando ele entra nessa condição, a condição do CLIENTE_ID = 1 se perde...
É isso que não pode ocorrer, o CLIENTE_ID = 1 tem que ser validado sempre, aí depois eu faço a verificação na data...
CONSEGUI RESOLVER, POREM É UMA GAMBI....
A cada OR eu repito a verificação 'creditos_id_cliente = 1 AND'.
Assim a cada OR ele vai verificar sempre o CLIENTE_ID = 1.
TÁ resolvido, mais se alguem tiver uma resolução melhor posta pra gente!!!
Agora imagine que amanhã ou depois mude para 36 parcelas? 100? ;)
Siga o que eu disse anteriormente, resumindo seu problema pode ser facilmente resolvido, pesquise aqui no imasters mesmo:
"NORMALIZAÇÃO DE DADOS"
Exemplo:
http://imasters.com.br/artigo/7020/banco-de-dados/modelagem-de-dados-final-normalizacao
http://www.luis.blog.br/normalizacao-de-dados-e-as-formas-normais.aspx
>
O problema é justamente no OR, pois ao meu ver quando ele entra nessa condição, a condição do CLIENTE_ID = 1 se perde...
É isso que não pode ocorrer, o CLIENTE_ID = 1 tem que ser validado sempre, aí depois eu faço a verificação na data...
CONSEGUI RESOLVER, POREM É UMA GAMBI....
A cada OR eu repito a verificação 'creditos_id_cliente = 1 AND'.
Assim a cada OR ele vai verificar sempre o CLIENTE_ID = 1.
TÁ resolvido, mais se alguem tiver uma resolução melhor posta pra gente!!!
Só por curiosidade e facilidade:
Poste a estrutura da sua tabela.
>
Olá, estou desenvolvendo uma pagina onde conterá um campo de busca de data:
DE: XX/XX/XXXX
ATÉ: XX/XX/XXXX
A tabela onde estou pesquisando tem 2 campos de data, pois é um sistema de BOLETO, então tem 2 parcelas, uma data de vencimento para cada uma.
A minha busca visa pegar o VALOR TOTAL de todas as parcelas do CLIENTE = 1 e onde a data que ele digitou para pesquisa esteja entre a data do campo data da parcela no Banco de Dados.
A consulta é essa:
SELECT SUM(creditos_valor_total) AS VALOR_TOTAL FROM creditos WHERE creditos_id_cliente = 1 AND
creditos_data_vencimento_parcela_1 >= '2012-01-01' AND creditos_data_vencimento_parcela_1 <= '2012-12-22' OR
creditos_data_vencimento_parcela_2 >= '2012-01-01' AND creditos_data_vencimento_parcela_2 <= '2012-12-22';
Só que, NOTE que a primeira condição que deverá ser tratada como prioridade é onde ele exibe as parcelas do cliente id = 1. Depois uso o AND para pegar as datas DE-ATE.
O Erro acontece quando eu uso o OR para fazer a verificação da data 1, 2 ....
Aqui eu disse que tenho 2 parcelas, mais como exemplo de solução, pois na verdade são 36 campos de parcelas...
O que posso fazer para forçar sempre ele a pegar o cliente_id = 1 ???
Obrigado