Eu pensei numa forma diferente, mas não sei se teria o melhor desempenho,
pelo número em número de consultas ao banco.
Seria uma função recursiva, para chegar até a folha. Algo como:

function consulta_menu($pai = 0)
{
//select childof_id = $pai
 $query = mysql_query("SELECT * FROM menu childof_id = $pai");

if(mysql_num_rows($query) > 0)
 {
 $menu = array();
 foreach($row = mysql_fecth_object($query))
 {
 $return = array('id'=>$row->order,
'title'=>$row->title,'order'=>$row->order); //etc
 $return['child'] = consulta_menu($row->id); //recursão
 $menu[] = $return;
 }
 return $menu;
 }else
 {
 return NULL;
 }
}

Não testei, mas seria algo do tipo.

Att,
Vinicius Cruz
http://twitter.com/vinaocruz
http://www.zime.com.br/


Em 19 de julho de 2010 14:41, Davi M. Tapajós <[email protected]>escreveu:

> Opa Gerson,
>
> Não tenho como testar isso direitinho agora, mas vou tentar dar um
> empurrão. :D
> Você pode fazer algo como:
>
> $array = array();
> foreach ($query->result_array() as $row) {
>    if ($row['childof_id'] = 0) {
>        $array[$row['id']]['id'] = $row['id'];
>        $array[$row['id']]['order'] = $row['order'];
>        $array[$row['id']]['childof_id'] = 0;
>    } else {
>        $array[$row['childof_id']]['id'] = $row['id'];
>        $array[$row['childof_id']]['order'] = $row['order'];
>        $array[$row['childof_id']]['childof_id'] = $row['childof_id'];
>    }
> }
>
> Não testei, deve tá faltando coisa, mas vê se pega a idéia
> Valeu
>
> --
> Davi
>
>
> Em 19 de julho de 2010 13:29, Gerson Goulart
> <[email protected]> escreveu:
> > Fala galera!
> >
> > Estou tentando fazer um negócio muito loco e não estou conseguindo.
> Resolvi
> > pedir ajuda aos "universitários". :-P
> >
> > Seguinte, tenho uma tabela no meu banco para armazenar os itens do menu
> do
> > site, com os seguintes campos:
> >
> > id
> > title
> > order -> Esse eu vou usar para ordenar os ítens por importância. Tipo: um
> > item de menu order=1 tem que vir antes de um order=2.
> > page_id
> > type
> > link
> > section
> > childof_id -> Esse vou usar pra criar hierarquia. Tipo:
> > item(id=1,childof_id=0) fica na raiz, item(id=2,childof_id=1) seria
> submenu
> > de 1.
> >
> > Para clarear a idéia, basicamente eu quero dar um select * nessa tabela e
> > transformá-la em algo assim (reparem que os itens estão agrupados de
> acordo
> > com a relação entre childof_id e id e que os itens com order maior
> aparecem
> > depois dos com order menor):
> >
> > • Notícias (id=2,order=4,childof_id=0)
> >     • Brasil (id=3,order=2,childof_id=2)
> >     • Mundo (id=10,order=3,childof_id=2)
> > • Esportes (id=7,order=10,childof_id=0)
> >     • Futebol (id=8,order=1,childof_id=7)
> >     • Natação (id=1,order=5,childof_id=7)
> >     • Formula 1 (id=4,order=7,childof_id=7)
> >
> > Agora o X da questão é: Como eu faço para reorganizar a query que recebo
> do
> > model (select * from menu) e reorganizar dessa forma estruturada antes de
> > enviar para a view?
> >
> > Fico imensamente grato com qualquer ajuda pq minha cabeça deu tilt já!
> > ehehehehe
> >
> > Abraços!
> >
> > _______________________________________________
> > Lista mailing list
> > [email protected]
> > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
> >
> >
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a