elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Menú recursivo con arrays de consulta MySql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Menú recursivo con arrays de consulta MySql  (Leído 2,595 veces)
l337*


Desconectado Desconectado

Mensajes: 1.016


I've been thinking...


Ver Perfil
Menú recursivo con arrays de consulta MySql
« en: 26 Junio 2012, 17:09 pm »

Buen día,

ando bloqueado para crear un menú recursivo utilizando una consulta con los siguientes datos:

Código:
//ejemplo de la primer fila regresada por la consulta sql
Array ( [id] => 12
          [year] => 2012
          [user_id] => 95
          [fecha] => 1340395675
          [ger_id] => 2
          [ad_id] => 4
          [area_especifica] => ghghb
          [cambio_id] => 5
          [prop_id] => 1
          [motivo] => bgb
          [antecedentes] => bghb
          [objetivos] => bghg
          [desc] => bgh
          [beneficios] => bgh
          [bases] => bgh
          [ar_id] => 1
          [ar_info] => bg
          [afect_amb] =>
          [afect_info] => bgh
          [partes_id] => 2
          [apd_id] => 6
          [capac] =>
          [capac_info] => bgh
          [com_riesgos] =>
          [com_info] => bgh
          [status] => EN REVISION
          [tipo_doc] => 0
          [area] => 3 area
          [cambio] => trés bien )

el menú que quiero hacer quedaría así:

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
</head>
<body>
<ul id="grupos">
  <li>year
    <ul>
      <li>area 1
        <ul>
          <li>status 1
            <ul>
              <li>cambio 1
                <ul>
                  <li>id 1</li>
                  <li>id 2</li>
                  <li>id 3</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
      <li>area 2
        <ul>
          <li>status 2
            <ul>
              <li>cambio 2
                <ul>
                  <li>id 4</li>
                  <li>id 5</li>
                  <li>id 6</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
        <ul>
          <li>status 3
            <ul>
              <li>cambio 3
                <ul>
                  <li>id 7</li>
                  <li>id 8</li>
                  <li>id 9</li>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </li>
  <li>year 2
    <ul>
      <li>area
        <ul>
          <li>status
            <ul>
              <li>cambio
                <ul>
                  <li>id 1</li>
                  <li>id 2</li>
                  <li>id 3</li>
                </ul>
              </li>
            </ul>
          </li>
         
        </ul>
      </li>
    </ul>
  </li>
</ul>
</body>
</html>

como ven, los resultados se agruparían por: Año->area->status->cambio->record .

Qué algoritmo me sugieren para crear esta lista ? considerando que:
- los records siempre estarán a 5 niveles
- el record siempre tiene "varios" parent_id... que vendrían siendo: Año->area->status->cambio, de ahí depende como se agrupa en la lista

la verdad no se me ocurre nada... lo único que había hecho fue:

Código:
    $cYear  = $cArea = $cStatus = $cCambio = "" ;
    $pYear  = $pArea = $pStatus = $pCambio = "" ;
    $html .= '<ul id="group">' ;
    $first = true ;
    $x = 0 ;
    foreach ($result as $d) {
      $html.="<li>".print_r($d)."</li>" ;
      /*if ($first) {
        $cYear = $d['year'] ;
        $html.='<li><a href="#" onclick="return false;">'.$d['year']."</a><ul>\n" ;
      }
      $pYear = $d['year'] ;

     
      $pArea = $d['area'] ;
      if ($pArea != $cArea) {
        $cArea = $d['area'] ;

        $html .= '<li><a href="#" onclick="return false;">'.$d['area']."</a><ul>\n" ;
      }
     
      $pStatus = $d['status'] ;
      if ($pStatus != $cStatus) {
        $cStatus = $d['status'] ;

        $html .= '<li><a href="#" onclick="return false;">'.$d['status']."</a><ul>\n" ;
      }
     
      $pCambio = $d['cambio'] ;
 
      if ($pCambio != $cCambio) {
     
        $cCambio = $d['cambio'] ;
       
        $html .= '<li><a href="#" onclick="return false;">'.$d['cambio']."</a><ul>\n" ;
      }
       
      $html .= "<li>CD-".$d['id']."/".$d['year']."</li>\n"  ;
     
      $first = FALSE ;
      //$x++ ;
      //if ($x==4) break ;*/
    }
    $html .= '</ul>' ;

pero como ven es un desmadre que no tiene nada de bonito....

cualquier sugerencia es agradecida.

gracias



En línea

marko1985

Desconectado Desconectado

Mensajes: 46


Ver Perfil
Re: Menú recursivo con arrays de consulta MySql
« Respuesta #1 en: 26 Junio 2012, 18:09 pm »

La verdad que es un poco lío al menos para mí, el cómo lo has explicado.

Tu quieres hacer un menú de 5 niveles si no me he enterado mal, independientemente de los datos que sean tu quieres hacer un menu dentro de otro que en realidad lo que son, son listas UL anidadas ¿Me equivoco? Quizás sería un poco más fácil si nos pones el código exacto por el que extraes esos datos, quizás en la misma extracción es más sencillo imprimir esa lista, inicialmente simplemente con while o con for se podría hacer, pero así explicado no me aclaro mucho.

Intenta simplificarlo un poco que seguro que alguien o yo mismo te ayudaremos con mucho gusto.

Saludos.


En línea

l337*


Desconectado Desconectado

Mensajes: 1.016


I've been thinking...


Ver Perfil
Re: Menú recursivo con arrays de consulta MySql
« Respuesta #2 en: 26 Junio 2012, 18:26 pm »

La verdad que es un poco lío al menos para mí, el cómo lo has explicado.

Tu quieres hacer un menú de 5 niveles si no me he enterado mal, independientemente de los datos que sean tu quieres hacer un menu dentro de otro que en realidad lo que son, son listas UL anidadas ¿Me equivoco? Quizás sería un poco más fácil si nos pones el código exacto por el que extraes esos datos, quizás en la misma extracción es más sencillo imprimir esa lista, inicialmente simplemente con while o con for se podría hacer, pero así explicado no me aclaro mucho.

Intenta simplificarlo un poco que seguro que alguien o yo mismo te ayudaremos con mucho gusto.

Saludos.

1. Así es, un menu (lista ul) que siempre es de 5 niveles. Estos datos siempre los traera el record utilizando el  siguiente query:
Código:
        
$sql = "SELECT f . * , a.nombre AS `area` , tc.nombre AS `cambio` "
             . "FROM `formato` f "
             . "LEFT JOIN `area_dpto` a ON f.ad_id = a.id "
             . "LEFT JOIN `tipo_cambio` tc ON f.cambio_id = tc.id "
             . "ORDER BY `year` DESC , `a`.`nombre` , `status` DESC, `tc`.`nombre`, `f`.`id`" ;
//lo que resulta de esto es el array que puse al principio.
2. Después de ejecutar el query, guardo el resultado en una variable y empiezo el foreach para leer los resultados:
Código:
$result=$db->query($sql) ;
foreach ($result as $d) {
  //aqui es donde quiero crear el ul
 //los datos se leerían: $d['year'].$d['cambio'], etc
}
3. Dentro del foreach es donde necesito "identificar" los padres del record para poder meterlo en el ul li apropiado.
El query ordena los records por año->area->status->cambio->id


mmm.... no sé si así me explico un poco mejor.

gracias
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
List/Menu con PHP, Dreamweave y MYSQL
PHP
Lilly_0915 1 2,566 Último mensaje 12 Febrero 2009, 14:51 pm
por cassiani
Manejo de arrays para una sesion en mysql
PHP
WHK 2 4,290 Último mensaje 5 Abril 2009, 03:30 am
por WHK
Ayuda con Arrays PHP, Formularios y MySQL
PHP
oscarj24 1 3,249 Último mensaje 26 Octubre 2009, 23:54 pm
por дٳŦ٭
Lista/Menu mysql y php
PHP
Mr. eggthos 1 4,389 Último mensaje 18 Diciembre 2009, 20:06 pm
por Mr. eggthos
Consulta de arrays php
PHP
mgarcia.informatico 7 2,252 Último mensaje 16 Enero 2015, 03:24 am
por MinusFour
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines