Subconsulta infinita

Bom dia pessoal,

Eu tenho um cadastro de empresas, onde eu posso vincular uma empresa como filial de outra. E por se tratar de empresas publicas em sua maioria, geralmente tem um órgão superior, que é pai de uma empresa, que esta por sua vez é pai de uma secretaria e assim por diante. O problema, é que estou precisando fazer uma consulta com treeview, para listar essas empresas aninhadas, pais e filhos.
Quando fazemos uma sub-consulta, até onde eu tenho conhecimento, temos que fazer manualmente para que cada sub-consulta exiba seus ninhos.
Alguém tem alguma dica de como fazer isso dinamicamente? Seria o caso de fazer uma programação em uma aplicação em branco?

Obrigado pessoal!

Aconselho fazer em pdf, pois os niveis de quebra não serao fixos, vai ter que controlar na unha

Haroldo,

O objetivo dessa consulta, é que possa se clicar em alguma empresa, passar o id dela como parametro para incluir essa mesma como pai da outra. Tenho como fazer isso em pdf?

Acredito que vc vai ter de usar a recursividade em conjunto com aplicações tree view e as macros de manipulação de itens de menu

sc_appmenu_reset
sc_appmenu_create
sc_appmenu_add_item

defina um padrão para saber quando parar de procurar pelo pai. Por exemplo: valor zero, nulo etc…

Um exemplo bem simplificado disso seria:

function possuiFilial($idEmpresa){
// codigo com os padroes

  //return true || false;

}

function recursiva($proximo = 0){
if(possuiFilial($proximo)){
// Adiciona como item no menu

              recursiva($proximo +1);
     }else{
              //codigo de finalização aqui
     }

}

Carlos Carucce,

É exatamente isso que pensei em fazer. Na verdade estou trabalhando em cima disso já, não sei como isso ficará visualmente falando, mas acho que pode dar certo.

qualquer novidade, postem aqui que eu tb vou postar… vlw

Aí deixa de ser consulta e não poderá imprimir como uma consulta nem exportar.

Amigos,

   Exiba sua arvore de tipo: Orgãos, departamento, divisões, setores ... em um menu treeview e coloque um link para o formulario de cadastro de Unidades (orgãos, departamentos ....). Crie um menu dinamicamente conforme exemplo no site/forum. Não tem como fazer via consulta sem limitações de profundidade da arvore, mas, via menu treeview pode ser feito sem problemas.

   Sua estrutura de Unidades deve ter no minimo:
   Id_unidade
   nome_unidade
   id_unidade_superior

Abraços !

Bom, vou esclarecer melhor sobre o que estou fazendo.

O motivo desse trabalho está sendo apenas para que o usuário, posso ver a arvore daquela empresa em questão. O Haroldo falou em imprimir, exportar etc. Sim, ele tem razão, mas no meu caso não terei essa necessidade. Usarei as empresas listadas no menu árvore, apenas para link, ou seja, ao clicar em alguma delas, vou passar para uma outra aplicação, possivelmente uma _blank, os parametros para que eu possa setar tal empresa como pai da empresa que estava aberta no formulário ao chamar essa árvore.

Volto a repetir, a finalidade não é uma consulta. Quando eu citei uma consulta com sub-consulta, eu realmente não lembrava da possibilidade de fazer isso com menu árvore.

http://iw.servehttp.com/sc/sm/app/Ecommerce/control_categorias/

Duas visões de categorias de produto de uma loja virtual nossa.

Com os selects pode acionar o evento ajax onclik e abrir o formulário, se o que deseja é a visão.

Segue o create da tabela:

[code]delimiter $$

CREATE TABLE lj_categorias (
id int(11) NOT NULL AUTO_INCREMENT,
IdGrupoCateg smallint(3) NOT NULL DEFAULT ‘0’,
codigo varchar(15) CHARACTER SET latin1 NOT NULL,
Descricao varchar(40) CHARACTER SET latin1 NOT NULL,
IdPai int(11) NOT NULL DEFAULT ‘0’,
IdDosPais varchar(30) CHARACTER SET latin1 NOT NULL,
Seq smallint(3) NOT NULL,
SeqTemp smallint(3) NOT NULL,
Nivel smallint(2) NOT NULL,
Visualizacao char(1) CHARACTER SET latin1 DEFAULT ‘V’ COMMENT ‘Inativo/Ambos/menu Horizontal/menu Vertical’,
Variacoes varchar(100) CHARACTER SET latin1 DEFAULT NULL,
CamposAdicionais varchar(100) CHARACTER SET latin1 DEFAULT NULL,
Status char(1) CHARACTER SET latin1 DEFAULT NULL COMMENT ‘Inativo’,
PRIMARY KEY (id),
KEY Index_2 (codigo)
) ENGINE=MyISAM AUTO_INCREMENT=187 DEFAULT CHARSET=utf8$$

[/code]

Instrução sql do primeiro combo:

SELECT ID, CONCAT( CASE WHEN IDGRUPOCATEG=0 THEN "" ELSE CASE WHEN NivEL=1 THEN "+-" ELSE "" END END, CASE WHEN (Nivel>1 && IDGRUPOCATEG>0) THEN CONCAT(RPAD('',(Nivel-1)*2,'| '),"+-") ELSE "" END, Descricao) AS CATEGORIAS FROM lj_categorias WHERE (NIVEL <>0) ORDER BY codigo

View para o segundo combo:

CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER SQL SECURITY DEFINER VIEW `hierarquia_categorias` AS select `l`.`id` AS `id`,`l`.`codigo` AS `codigo`,`l`.`Descricao` AS `Descricao`,`l`.`Visualizacao` AS `Visualizacao`,group_concat(cast(`l2`.`id` as char(8) charset utf8) order by `l2`.`codigo` ASC separator ',') AS `idPais`,group_concat(`l2`.`codigo` order by `l2`.`codigo` ASC separator ',') AS `codigoPais`,group_concat(`l2`.`Descricao` order by `l2`.`codigo` ASC separator ' -> ') AS `DescricaoPais` from (`lj_categorias` `l` join `lj_categorias` `l2` on(((`l`.`codigo` like concat(`l2`.`codigo`,'.%')) or (`l`.`codigo` = `l2`.`codigo`)))) where ((not((`l`.`Status` like 'I'))) or isnull(`l`.`Status`)) group by `l`.`codigo`

A recursividade é infinita, o trabalho todo está no sql,
##=nivel 1,
##.##=nivel 2,
##.##.###= nivel 3

o grupo de estrutura pode terminar em qualquer nível.

Agora como você vai alimentar a tabela, deixo por sua conta.

Bom ,

  Fiz com menu treeview e funcionou beleza . Manda um email para min que respondo com telas de como ficou e posso até mandar o código feito no inicio da menu para carga no mesmo. 

belgadata@gmail.com

Abraços !

Deu para entender fique tranquilo :).

Apenas um outro ponto que acho q pode ser de grande ajuda:

Eu fiz em um sistema esse esquema de recursividade porem não para empresas mas para grupos de produto.
Cheguei em um momento que meio que não conseguia mais visualizar como a lógica estava funcionando então passei parte do código dentro de um arquivo que gera uma lista ul li.

Não sei como está se desenvolvendo o seu trabalho mas isso me ajudou bastante a saber o que estava acontecendo por baixo dos panos e até melhorar meu código. Fica dica.

Abraços…

[/quote]

Deu para entender fique tranquilo :).


[/quote]

:slight_smile: eu queria apenas frisar mesmo para não fazer a galera perder tempo pensando em algo que não era o objetivo. Mas vlw.

eu tambem estou fazendo com menu arvore e está fluindo.

Eu não estou gostando da aparencia… Se tiver alguma dica vou agradecer. Estou encaminhando o e-mail para caso tenha alguma dica vc me envie… vlw!

Galera ai agente vai ter que sair um pouco do conforto do scriptCase, usar as aplicações blank para esse tipo de situação é saudável para nós como programadores, claro que tudo tem um jeito, mas se você quer algo realmente funcional apresentável e com código enxuto, faça em aplicações blank. xD Se tiverem dúvidas e se tiverem dificuldades podem postar que eu ajudo com o maior prazer, cada desafio que eu vejo solução aqui no fórum é como se fosse para mim, porque tudo é aproveitado por todos.

[…]

Concordo Robert.

Se a coisa vai ficar complexa requer recursos extras.

Isso ai amigo, vlw pela ajuda.

Estou prestes a publicar a aplicação que fiz, dependendo do resultado eu te procuro. :wink:

Calma galera o rapaz só está querendo colocar itens no treeview kkkk.

tenta agrupar por quebras, tipo empresa pai+1filha na 1 quebra, na 2 quebra 1filha+1neta na 3 quebra 1neta+1bisneta, e assim por diante.