Hola Diego.
Lo anteriormente expuesto es la estructura de base de datos necesaria para almacenar el menú. Para imprimirlo necesitás un algorítmo recursivo de árboles n-arios (múltiples ramas). No te asustes, es bastante simple.
No estoy de acuerdo con lo de que hay que actualizar toda la estructura. No hay que actualizar nada. Y lo explico a continuación.
Todo árbol tiene 1 y sólo 1 raíz. La raíz, tiene id_menu=0, NO SE IMPRIME. Y el campo niveles de la raiz contiene el orden de impresión de las ramas superiores del árbol que forma el menú. Notar que en el caso de la raíz, el campo niveles te indica el orden de impresión de las ramas EN EL SENTIDO DESDE LA RAIZ HACIA ABAJO (en el resto de la estructura en al reves).
Si vos partis del siguiente menu:
0
1 autos
2 ford
3 chevrolet
4 bicicletas
5 giant
6 trek
y te piden que entre los autos y las bicicletas metas las motos, en lugar de mover las bicicletas, lo que haces es insertarlo a continuacion (con el siguiente numero en la secuencia incremental o sea el 7)
0
1 autos
2 ford
3 chevrolet
4 bicicletas
5 giant
6 trek
7 motos
8 vmw
esto es a nivel de base de datos. A nivel visual si vos quisieras imprimir en el siguiente orden: autos, motos, bicicletas (o sea, intercalando el menu motos entre autos y bicicletas) lo que tenes que hacer es armar un arbol n-ario con esta estructura.
La raiz del arbol tendrá código 0 y padre NULL (sin padre) y el campo "niveles" de la raíz te indicará el orden en el que se deben imprimir. Esto se hace así por 3 cosas:
1) los árboles deben tener una raíz, por mas que tengan n-ramas, deben partir de 1 raíz (que no se muestra)
2) te permite cambiar EN EL ACTO Y SIN RE-ASIGNAR NADA DE NADA, el orden de las ramas. Es decir, en la raíz vos tenés en el campo niveles lo siguiente: 1|7|4 lo que te indica que querés imprimir: autos seguido de motos seguido de bicicletas. Si el día de mañana te cambian el orden a autos seguido de bicicletas seguido de motos, vos haces: 1|4|7 y listo! el algortítmo de impresión del menú es recursivo. Y lo encontrarás en cualquier sitio de programación. Es bastante básico. En cuanto tenga 5 minutos disponibles lo subo yo
3) este menu es totalmente escalable, en el sentido que puede crecer indefinidamente con n-niveles de anidamineto.
otro ejemplo:
ahora supongamos que te piden agregar las categorias rutera y MT B (Mountain Bike) en Giant, nos queda así:
0
1 Autos
2 Ford
3 VW
4 Bicicletas
5 Giant
9 Giant rutera
10 Giant MTB
6 Trek
7 Motos
8 BMW
a nivel base de datos tendías:
| id_menu | nombre | id_menu_padre | niveles |
| 0 | | NULL | 1|7|4 (indica el orden de impresión de los menues superiores) |
| 1 | Autos | 0 | 0|1 |
| 2 | Ford | 1 | 0|1|2 |
| 3 | VW | 1 | 0|1|3 |
| 4 | Bicicletas | 0 | 0|4 |
| 5 | Giant | 4 | 0|4|5 |
| 6 | Trek | 4 | 0|4|6 |
| 7 | Motos | 0 | 0|7 |
| ...(sigue)... |
Acabamos de intercalar 2 categorías en Giant y realizamos cero movimientos en la base de datos. No re-asignamos nada como verás. Simplemente seguimos usando el siguiente dígito en la secuencia.
Sí o sí necesitas enteder como funciona 1 algorítmo recursivo para poder manejar esto. Es la forma mas eficiente de imprimir una estructura de estas características.
Cualqueir duda consultame, si estoy libre de tiempo te respondo mejor.
saludos,
Walter