Plano de contas com nível através de MySQL
Bom dia. Preciso de um procedimento em MySQL que liste os meus planos de conta por níveis, como uma ol em html, por exemplo:
<ol>
<li>Mantenção</li>
<ol>
<li>Operacionais</li>
<li>Não Operacionais</li>
<li>Outras Entradas</li>
</ol>
<li>Saídas</li>
<ol>
<li>Operacionais</li>
<li>Não Operacionais</li>
<li>Imobilizado</li>
<li>Investimentos</li>
</ol>
</ol>
Atualmente minha tabela está de maneira resumida assim:
Presumo que seja mais fácil organiza-la dessa maneira no próprio banco, pelo Delphi até dá pra fazer algo parecido com o JvDBTreeView, mas iremos portar a aplicação futuramente pra web, então ficaria bem mas flexível por SQL. Caso queiram que eu modifique a estrutura da tabela para ficar mais apropriada tem como fazer.
Abraços
<ol>
<li>Mantenção</li>
<ol>
<li>Operacionais</li>
<li>Não Operacionais</li>
<li>Outras Entradas</li>
</ol>
<li>Saídas</li>
<ol>
<li>Operacionais</li>
<li>Não Operacionais</li>
<li>Imobilizado</li>
<li>Investimentos</li>
</ol>
</ol>
Atualmente minha tabela está de maneira resumida assim:
CREATE TABLE plano_de_contas( id BIGINT NOT NULL AUTO INCREMENT PRIMARY KEY, master_id BIGINT, //armazena o id do plano pai descricao VARCHAR(20) );
Presumo que seja mais fácil organiza-la dessa maneira no próprio banco, pelo Delphi até dá pra fazer algo parecido com o JvDBTreeView, mas iremos portar a aplicação futuramente pra web, então ficaria bem mas flexível por SQL. Caso queiram que eu modifique a estrutura da tabela para ficar mais apropriada tem como fazer.
Abraços
Júnior Garcia
Curtidas 0
Respostas
William
18/12/2012
Colega acredito que desta maneira não vai ter jeito, pois os registros são exibidos de forma diferente, mas usando instruções SQL da para fazer algo assim:
Manutenção | Operacionais Manutenção | Não Operacionais Manutenção | Outras Entradas Saídas | Operacionais Saídas | Não Operacionais Saídas | Imobilizado Saídas | Investimentos
GOSTEI 0
Júnior Garcia
18/12/2012
bom, é uma saída amigo, e como poderia fazer algo assim?
abraço.
abraço.
GOSTEI 0
William
18/12/2012
Por gentileza, poste quais campos existem nas suas tabelas e como está o relacionamento entre elas.
GOSTEI 0
Júnior Garcia
18/12/2012
tenho a tabela plano_de_contas. Campos: id (chave primaria), descricao varchar, master_id (armazena o id do plano pai, faz referencia ao campo id da própria tabela)
GOSTEI 0
William
18/12/2012
Bom Júnior de acordo com sua explicação montei o seguinte cenário:
- Tabela plano_pai
- Tabela plano_contas
Montei a seguinte instrução SQL:
Resultado:
Veja se consegui entender sua dúvida e resolve-la.
- Tabela plano_pai
ID | DESCRICAO 1 | MANUTENÇÃO 2 | SAÍDAS
- Tabela plano_contas
ID | DESCRICAO | MASTER_ID 1 | OPERACIONAIS | 1 2 | NÃO OPERACIONAIS | 1 3 | OUTRAS ENTRADAS | 1 4 | OPERACIONAIS | 2 5 | NÃO OPERACIONAIS | 2 6 | IMOBILIZADO | 2 7 | INVESTIMENTOS | 2
Montei a seguinte instrução SQL:
SELECT p.descricao AS Plano_Pai, c.descricao as Plano_Contas FROM plano_contas c INNER JOIN plano_pai p ON c.master_id = p.id
Resultado:
PLANO_PAI | PLANO_CONTAS Manutenção | Operacionais Manutenção | Não Operacionais Manutenção | Outras Entradas Saídas | Operacionais Saídas | Não Operacionais Saídas | Imobilizado Saídas | Investimentos
Veja se consegui entender sua dúvida e resolve-la.
GOSTEI 0
Júnior Garcia
18/12/2012
fala cara! Até deu certo, mas ele está repetindo as categorias na categoria master, assim:
Como faz pra ele parar de dizer que o master é o mesmo que o atual qdo o campo é NULL?
Manutenção | Manutenção //o master_id aqui é NULL no banco, mas repete como sendo o master o mesmo da categoria atual Manutenção | Outras Entradas Manutenção | Operacionais Saídas | Saídas //repete denovo Saídas | Imobilizado ...
Como faz pra ele parar de dizer que o master é o mesmo que o atual qdo o campo é NULL?
GOSTEI 0
William
18/12/2012
Colega, acho que um LEFT na tabela plano_contas deve ajudar:
SELECT p.descricao AS Plano_Pai, c.descricao as Plano_Contas FROM plano_contas c LEFT JOIN plano_pai p ON c.master_id = p.id
GOSTEI 0
Júnior Garcia
18/12/2012
tentei e ainda assim não dá certo :/
Meu SQL está assim:
O resultado é esse:
[code]
plano_master id_master plano_conta id_plano
Manutenção 1 Manutenção 1
Manutenção 1 Outras Entradas 5
Manutenção 1 Não Operacionais 4
Manutenção 1 Operacionais 3
Saídas 2 Saídas 2
Saídas 2 Não Operacionais 7
Saídas 2 Imobilizado 8
Saídas 2 Investimentos 9
Saídas 2 Não Operacionais 10
Saídas 2 Operacionais 6
Meu SQL está assim:
SELECT p.descricao AS plano_master, p.id AS id_master, c.descricao AS plano_conta, c.id AS id_plano FROM plano_de_contas c INNER JOIN plano_de_contas p on (c.master_id = p.id) ORDER BY c.master_id
O resultado é esse:
[code]
plano_master id_master plano_conta id_plano
Manutenção 1 Manutenção 1
Manutenção 1 Outras Entradas 5
Manutenção 1 Não Operacionais 4
Manutenção 1 Operacionais 3
Saídas 2 Saídas 2
Saídas 2 Não Operacionais 7
Saídas 2 Imobilizado 8
Saídas 2 Investimentos 9
Saídas 2 Não Operacionais 10
Saídas 2 Operacionais 6
GOSTEI 0
William
18/12/2012
Na tabela Plano_Contas existe o cadastro de "Manutenção" e "Saída"?
Achei que esses planos só estivessem cadastrados na tabela Plano_Pai!
Achei que esses planos só estivessem cadastrados na tabela Plano_Pai!
GOSTEI 0
Júnior Garcia
18/12/2012
na verdade está na mesma tabela mesmo, hehe
GOSTEI 0