Função recursiva com Mysql

tenho uma tabela em SQL feita com a seguinte estrutura:
id | menu | dep | url

id - numeração automatica
menu - Text
dep - Int
url - Text

Para que serve? R: Esta tabela gera um menu com sub-menus ilimitados.Isto é, é criado varios menus iniciais com dep "-1" e todos os outros k não tem dep = -1 estão pendurados num menu valido. Ex:
0 | menu1 | -1 | #
1 | menu2 | -1 | #
2 | menu3 | -1 | #
4 | submenu1 | 0 | #
5 | submenu2 | 4 | #
6 | submenu3 | 4 | #
7 | submenu4 | 5 | #

Estrutura:
menu1
submenu1
submenu2
submenu4
submenu3
menu2
menu3

Isto esta tudo a funcionar excepto o codigo de eliminar um dos menus. Isto é: Imaginem que desejo eliminar o menu1. Terei de criar uma função que lista todos os items do menu1 e em cada item desses, terei de voltar a listar o seu conteudo eliminando assim sempre a "cauda" com o metodo de recursividade. (sei que esta mal explicado mas acho k deu para perceber)

O codigo que estou a utilizar para fazer isso é este:

1. function elimina_dados($menu) {
2.
3. $sql2 = "SELECT * FROM menu where id='$menu'";
4. $sql2 = mysql_query( $sql2 );
5. while( $B = mysql_fetch_array( $sql2 ) ) {
6. $nr = $B['id'];
7. print $nr;
8. elimina_dados($nr);
9. $del = mysql_query( "DELETE FROM menu WHERE id='$temp'" );
10. mysql_query( $del );
11. }
12. }

elimina_dados(0);

O unico problema disto é que não funciona... mas se comentar a linha 8 já funciona mas não elimina os submenus desse menu eliminado. Alguem sabe o que está mal aqui? será que tenho de declarar a função para fazer a recursividade da mesma? e como faço isso!?


P.S. - Ja procurei no google... nada, não encontro nada deste genero.
 
tens umas funções para usar em estruturas tipo em arvore: connect by prior

um exemplo:
Código:
(select info.object_id
           from dssmdobjinfo info
          where info.object_type = 12
            and info.subtype = 3072
          start with info.object_id = '6E59DF8F4E3309F11AA3EBA87ED29C03'
         CONNECT BY PRIOR info.object_id = info.parent_id)

este sql usei para sakar objectos usados numa hierarquia de pastas. pode ser que te ajude
 
Última edição:
Descobri o problema... ciclo infinito. A correcção esta a <b>BOLD</b>

1. function elimina_dados($menu) {
2.
3. $sql2 = "SELECT * FROM menu where <b>dep</b>='$menu'";
4. $sql2 = mysql_query( $sql2 );
5. while( $B = mysql_fetch_array( $sql2 ) ) {
6. $nr = $B['id'];
7. print $nr;
8. elimina_dados($nr);
9. $del = mysql_query( "DELETE FROM menu WHERE id='$temp'" );
10. mysql_query( $del );
11. }
12. }

Problema resolvido ;)


P.S. - CyberOps obrigado pelo ajuda ;)
 
Back
Topo