Foros del Web » Programando para Internet » PHP »

Mostrar consulta MYSQL como una lista anidada

Estas en el tema de Mostrar consulta MYSQL como una lista anidada en el foro de PHP en Foros del Web. Hola muy buenas tardes. Tengo un problema que, aunque no es muy complejo, no consigo solucionar. Necesito, a partir de una consulta a una base ...
  #1 (permalink)  
Antiguo 28/01/2014, 08:29
 
Fecha de Ingreso: diciembre-2011
Mensajes: 13
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Mostrar consulta MYSQL como una lista anidada

Hola muy buenas tardes.
Tengo un problema que, aunque no es muy complejo, no consigo solucionar.
Necesito, a partir de una consulta a una base de datos, ordenar el resultado como si fuera una lista.

Mi consulta es:

-----
$rs = mysql_query(
SELECT id, nombre, tipo, subtipo, destacado
FROM fichas
ORDER BY tipo, subtipo ASC)
----

Que en teoría me devuelve una tabla de este tipo:

id / nombre / tipo / subtipo / destacado
------------------------------------------------------------
id1 / nombre1 / tipo1 / subtipo1 / 0
id2 / nombre2 / tipo1 / subtipo1 / 0
id3 / nombre3 / tipo1 / subtipo2 / 0
id4 / nombre4 / tipo2 / subtipo3 / 0
id5 / nombre5 / tipo2 / subtipo4 / 0


Lo que necesito es mostrar varias listas de los nombres, pero ordenadas por tipo y subtipo. Es decir varias listas:

TIPO1 (h3)
-subtipo1
--nombre
--nombre
...
-subtipo2
--nombre
--nombre
...

TIPO2(h3)
-subtipo3
--nombre
--nombre
...
-subtipo4
--nombre
--nombre
...


El HTML quedaría más o menos así:


<div class="bloque">

<h3>Tipo1</h3>

<ul>
<li>Subtipo1
<ul>
<li>nombre1</li>
<li>nombre2</li>
</ul>
</li>

<li>Subtipo2
<ul>
<li>nombre3</li>
</ul>
</li>
<ul>
</div> <!--fin bloque-->



<div class="bloque">

<h3>Tipo2</h3>

<ul>
<li>Subtipo3
<ul>
<li>nombre4</li>
</ul>
</li>

<li>Subtipo4
<ul>
<li>nombre5</li>
</ul>
</li>
<ul>
</div> <!--fin bloque-->


He intentado ser lo más claro posible, espero que se entienda.

Muchas gracias por vuestras respuestas.

Última edición por Voador; 28/01/2014 a las 08:39
  #2 (permalink)  
Antiguo 28/01/2014, 08:42
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: Mostrar consulta MYSQL como una lista anidada

Código PHP:
$datos "consula de la base";

foreach( 
$datos as $dato ){
  
$resultado$dato[' tipo'] ][] = $dato;
}

o

foreach( $datos as $dato ){
  
$resultado$dato[' tipo'] ][] = $dato['nombre'];

  #3 (permalink)  
Antiguo 28/01/2014, 09:06
 
Fecha de Ingreso: diciembre-2011
Mensajes: 13
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Mostrar consulta MYSQL como una lista anidada

¿Y cómo integro eso para obtener el HTML que deseo?

Un saludo
  #4 (permalink)  
Antiguo 28/01/2014, 10:23
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 27
Respuesta: Mostrar consulta MYSQL como una lista anidada

Código PHP:
<?
foreach( $datos as $dato ){
  
$resultado$dato[' tipo'] ]['subtipo'] = $dato['nombre'];


$controlSubTipo 0;

foreach( 
$resultado as $tipo=>$contTipo ){
  
?>
  <div class="bloque">
  <h3><?=$tipo?></h3>
    <ul><?
      
foreach( $contTipo as $subtipo=>$nombre ){
         if( 
$controlSubTipo==|| $controlSubTipo!=$subtipo ){
         
?>
          <li><?=$subtipo?>
             <ul>
         <?
         
}


         
?> <li>$nombre</li><?
     

         
if( $controlSubTipo!=$subtipo && $controlSubTipo!=){
         
?>
              </ul>
         </li>
         <?
        $controlSubTipo 
$subtipo;
      }
      
?>
    </ul>
  </div>
<?
}

Última edición por luis010182; 28/01/2014 a las 10:33
  #5 (permalink)  
Antiguo 28/01/2014, 10:44
 
Fecha de Ingreso: diciembre-2011
Mensajes: 13
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Mostrar consulta MYSQL como una lista anidada

No consigo hacerlo funcionar Me da errores.
Buscaré alguna otra forma, muchas gracias por tu tiempo!

Etiquetas: html, lista, mysql+php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:40.