Fórum Plano de contas com nível através de MySQL #431204

18/12/2012

0

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:

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

Júnior Garcia

Responder

Posts

18/12/2012

William

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
Responder

Gostei + 0

18/12/2012

Júnior Garcia

bom, é uma saída amigo, e como poderia fazer algo assim?

abraço.
Responder

Gostei + 0

18/12/2012

William

Por gentileza, poste quais campos existem nas suas tabelas e como está o relacionamento entre elas.
Responder

Gostei + 0

18/12/2012

Júnior Garcia

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)
Responder

Gostei + 0

18/12/2012

William

Bom Júnior de acordo com sua explicação montei o seguinte cenário:

- 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.
Responder

Gostei + 0

19/12/2012

Júnior Garcia

fala cara! Até deu certo, mas ele está repetindo as categorias na categoria master, assim:

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?
Responder

Gostei + 0

19/12/2012

William

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 
Responder

Gostei + 0

19/12/2012

Júnior Garcia

tentei e ainda assim não dá certo :/

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
Responder

Gostei + 0

19/12/2012

William

Na tabela Plano_Contas existe o cadastro de "Manutenção" e "Saída"?

Achei que esses planos só estivessem cadastrados na tabela Plano_Pai!
Responder

Gostei + 0

19/12/2012

Júnior Garcia

na verdade está na mesma tabela mesmo, hehe
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar