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.