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 NomeRzSocial
FROM ContasPagar CP, Fornecedores Forn,
Entidades Ent, Funcionarios Fun, Bancos Ban,
NomesOutros NOut, CondPagamentoCP CondCP, Transportadoras Trans
WHERE
(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.Codigo
A 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.
Pergunta
deivis
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:
A 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.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.