Foros del Web » Programando para Internet » PHP »

Retornar datos de una consulta y un ciclo anidado

Estas en el tema de Retornar datos de una consulta y un ciclo anidado en el foro de PHP en Foros del Web. Hola expertos de la Web, verán me surge esta necesidad, tengo una función que consulta la tabla tb_menus y esta a la vez tiene sub-menus ...
  #1 (permalink)  
Antiguo 23/11/2011, 18:49
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 9 meses
Puntos: 52
Retornar datos de una consulta y un ciclo anidado

Hola expertos de la Web, verán me surge esta necesidad, tengo una función que consulta la tabla tb_menus y esta a la vez tiene sub-menus y para ello consulta la tabla tb_submenus las consultas son sencillas si hago todo el PHP y el HTML juntos pero quiero lo que quiero hacer es que la funcion retorne los datos en un arreglo para luego recorrerlos.

Código PHP:
Ver original
  1. function menus(){
  2. $consultaMenus = $conn->query("SELECT * FROM tb_menus");
  3. $datosMenus = $consultaMenus->fetch(PDO::FETCH_ASSOC);
  4.  
  5. while($menu = $consultaMenus){
  6. $consultaSubMenus = $conn->query("SELECT * FROM tb_submenus WHERE codimenu = '".$datosMenus['codimenu']."'");
  7. }
  8. return array("menus" => $consultaMenus->fetch(PDO::FETCH_ASSOC), "submenus" => $consultaSubMenus->fetch(PDO::FETCH_ASSOC));
  9. }

Ahora, al recorrer los arreglos retornados por la consulta, es donde se presenta el problema, en algunos casos se imprimen todos los menus, pero no los submenus y en otros casos pasa lo contrario, ya he intentado de todo pero no he logrado solucionarlo por eso acudo a ustedes.

Espero me hayan entendido y me puedan ayudar.
__________________
Aprendiendo!!!
  #2 (permalink)  
Antiguo 19/12/2011, 08:21
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 9 meses
Puntos: 52
Respuesta: Retornar datos de una consulta y un ciclo anidado

Bueno pues despues de preguntar aqui y alla... por ahi me han ayudado a solucionar esta duda... y como es lo concerniente al foro pues aqui publico la solucion:

Código PHP:
Ver original
  1. <?php
  2. $my_handler = new PDO("mysql:host=localhost;dbname=XXX", "XXX", "XXX");
  3. $my_query = "SELECT tbl_menus.id AS menu_id, tbl_menus.menu AS menu_menu, tbl_submenus.id AS submenu_id, tbl_submenus.submenu AS submenu_submenu FROM tbl_menus LEFT JOIN tbl_submenus ON tbl_menus.id = tbl_submenus.menu_id";
  4. $result = $my_handler->query($my_query);
  5. while ($row = $result->fetch (PDO::FETCH_ASSOC))
  6. {
  7. $menus[$row['menu_id']]['Nombre'] = $row['menu_menu'];
  8. $menus[$row['menu_id']]['Id'] = $row['menu_id'];
  9. $menus[$row['menu_id']]['Submenus'][$row['submenu_id']] = array('Submenu_id' => $row['submenu_id'], 'Submenu' => $row['submenu_submenu']);
  10. }
  11. print_r($menus);
  12. foreach($menus as $menu)
  13. {
  14.   echo '<p>Submenus de principal: '.$menu['Nombre'].' con id '.$menu['Id'].' </p>';echo "\n";
  15.   foreach ($menu['Submenus'] as $submenu)
  16.   {
  17.       echo '<p>**Submenu "'.$submenu['Submenu_id'].'" con nombre: "'.$submenu['Submenu'].'"</p>';echo "\n";
  18.   }
  19. }
  20. ?>

Esto retornara:

Código:
Array
(
    [1] => Array
        (
            [Nombre] => Carros
            [Id] => 1
            [Submenus] => Array
                (
                    [1] => Array
                        (
                            [Submenu_id] => 1
                            [Submenu] => Camionetas
                        ) 
                ) 
        ) 
    [2] => Array
        (
            [Nombre] => Casas
            [Id] => 2
            [Submenus] => Array
                (
                    [2] => Array
                        (
                            [Submenu_id] => 2
                            [Submenu] => De Playa
                        )
 
                    [3] => Array
                        (
                            [Submenu_id] => 3
                            [Submenu] => De Campo
                        )
 
                    [4] => Array
                        (
                            [Submenu_id] => 4
                            [Submenu] => San Salvador
                        ) 
                ) 
        ) 
)
<p>Submenus de principal: Carros con id 1 </p>
<p>**Submenu "1" con nombre: "Camionetas"</p>
<p>Submenus de principal: Casas con id 2 </p>
<p>**Submenu "2" con nombre: "De Playa"</p>
<p>**Submenu "3" con nombre: "De Campo"</p>
<p>**Submenu "4" con nombre: "San Salvador"</p> 
Espero esto le sirva a alguien...
__________________
Aprendiendo!!!

Etiquetas: html, retornar, tabla, anidados, ciclos
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 14:55.