Bueno, hola a todos. En verdad agradezco mucho su ayuda.
masterpuppet desafortunadamente no alcance a ver tu post antes de crear mi solución pero viendola me parece que es la más apropiada. Alguna vez maneje en mis años mozos eso de los árboles en estructura de datos en c++ pero tantos años fuera de la academía me han hecho perder un poco el ritmo.
Con respecto a la solución que me dio
oscartt67, la recursión me presento algunos inconvenientes pero me base en la idea para crear mi propia solución. Con esta logre mi solución para tres niveles de profundidad. Ya se algunos me daran un cocotazo en la cabeza al ver tres anidamientos pero estoy seguro que con un poco más de trabajo y basandome en el enlace de
masterpuppet podre crear una solución para n niveles. Prometo que si la encuentro la publicare.
Igual agradezco a
ocp001a por su aporte inicial, me ayudo mucho a destrabarme porque no tenía ni idea de como empezar a atacar el problema.
Bueno, sin mas preambulos doy la solución que diseñe para tres niveles de profundidad. Creo que esta muy bien explicada en los comentarios asi que omito dar detalles adicionales. Igual si alguien quiere información adicional con gusto se la doy.
p.s. Para mis amigos españoles cocotazo es una hostia dada en la cabeza con los nudillos de la mano cerrada. Vamos un coscorrón de toda la vida.
Código PHP:
require_once "scripts/connect_to_mysql.php";
function Menu ($pid=0,$myConnectionUser){
//$myConnectionUser=$myConnectionUser;
$sqlCommand="SELECT * FROM pages WHERE parentid=$pid";
$query = mysql_query($sqlCommand,$myConnectionUser) or die (mysql_error()); //busca los enlaces de primer nivel
if (empty($query)){return "";}
//echo count($query)."<br/>";
while ($row = mysql_fetch_array($query)) {
$sqlsub="SELECT * FROM pages WHERE parentid={$row['id']}";
$querysub = mysql_query($sqlsub,$myConnectionUser) or die (mysql_error());
if (mysql_num_rows($querysub)==0){//si no tiene hijos imprime la lista
$menu.="<li><a href=\"{$row['id']}\">{$row['linklabel']}</a></li>";
}//if (mysql_num_rows($querysub)==0){
else{//si tiene hijos empieza a buscarlos
//$menu.="<li><a href=\"{$row['id']}\">{$row['linklabel']}</a><ul>";
$menu.="<li><a href=\"#\">{$row['linklabel']}</a><ul>";
while ($rowsub = mysql_fetch_array($querysub)) {
$sqlsub2="SELECT * FROM pages WHERE parentid={$rowsub['id']}";//busqueda de los hijos de los hijos
$querysub2 = mysql_query($sqlsub2,$myConnectionUser) or die (mysql_error());
if (mysql_num_rows($querysub2)==0){//si no tiene hijos imprime la lista
$menu.="<li><a href=\"{$rowsub['id']}\">{$rowsub['linklabel']}</a></li>";
}//if (mysql_num_rows($querysub2)==0){
else{//si tiene hijos empieza a buscarlos
$menu.="<li><a href=\"#\">{$rowsub['linklabel']}</a><ul>";
while ($rowsub2 = mysql_fetch_array($querysub2)) {
$menu.="<li><a href=\"{$rowsub2['id']}\">{$rowsub2['linklabel']}</a></li>";
}//while ($rowsub2 = mysql_fetch_array($querysub2)) {
$menu.="</ul></li>";
}//else tercer nivel
}//while ($rowsub = mysql_fetch_array($querysub)) {
$menu.="</ul></li>";
}//else{ para dibujar segundo nivel
}// while ($row = mysql_fetch_array($query)) {
return $menu;
}//function Menu ($pid=0,$myConnectionUser){
$menu=Menu(0,$myConnectionUser);
$menu="<div id='header'><ul class='nav'>$menu</ul></div>";//añade el div y el ul externo y con eso se completa la lista del menu