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 construindo um módulo de contas a pagar, este conta com opções de forma de pagamento da conta, e a quem será pago a conta.
O problema está acontecendo na consulta deste, para mostrar o resultado da consulta é necessário relacionar 8 tabelas. A consulta conta com as seguintes tabelas:
1. Conta -> Informações sobre a conta
2. CondPagamentoCP -> Condições de pagamento de cada conta
3. Fornecedores -> a quem será pago a conta
4. Funcionarios -> a quem será pago a conta
5. Bancos -> a quem será pago a conta
6. Outros -> a quem será pago a conta
7. Entidades -> a quem será pago a conta
8. Transportadoras -> a quem será pago a conta
Então cada vez que vou cadastrar uma conta escolho a quem será pago a conta(itens 4 a 8), e gravo na tabela de Conta o código a quem foi pago e se é Fornecedores('FO'), Funcionários('FU'), Bancos('BA')...
Fiz a seguinte SQL:
SELECT CP.Codigo, CP.NumNf, CP.DataLancamento, CP.Pagoa, CP.CodPagoa, CP.Conta, CP.Valor, CP.ValorTotal, CP.ValorPago, CondCP.Codigo as CodCondPagamento, CondCP.CodContaPgto, CondCP.Condicao, CondCP.Valor as ValorCondicao, CondCP.DataVencimento, CondCP.DataPagamento, CondCP.Situacao, IF (CP.Pagoa='FO', Forn.RazaoSocial, IF (CP.Pagoa = 'EN', Ent.RzSocial, IF(CP.Pagoa = 'FU', Fun.Nome, IF(CP.Pagoa = 'BA', Ban.Nome, IF(CP.Pagoa = 'TR', Trans.RazaoSocial, NOut.Nome))))) as NomeRzSocialFROM ContasPagar CP, Fornecedores Forn, Entidades Ent, Funcionarios Fun, Bancos Ban, NomesOutros NOut, CondPagamentoCP CondCP, Transportadoras TransWHERE (IF (CP.Pagoa = 'FO', Forn.Codigo = CP.CodPagoa, IF (CP.Pagoa = 'EN', Ent.Codigo = CP.CodPagoa, IF (CP.Pagoa = 'FU', Fun.Codigo = CP.CodPagoa, IF (CP.Pagoa = 'BA', Ban.Codigo = CP.CodPagoa, IF (CP.Pagoa = 'TR', Trans.Codigo = CP.CodPagoa, NOut.Codigo = CP.CodPagoa)))))) AND CondCP.CodContaPgto = CP.Codigo AND CP.Codigo = :Codigo GROUP BY CondCP.CodigoA SQL acima faz o que eu quero, mas só que esta consulta fica muito demorada mesmo quando a tabela tem poucos registros.
Caso alguém tenha uma idéia de como melhorá-la ou outra solução me envie.
Estou usando o MySql e o componente Zeos para acessá-lo.
Atenciosamente, Deivis.
Carregando comentários...