Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/09/2009, 09:36
samu22
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 1 mes
Puntos: 16
Problema listando categorias

Hola gente, esta noche me tuvo loco un problema que no pude resolver, ya mis neuronas no dan a basto y quiciera saber si alguien tiene una idea que pueda horientar mejor mi busqueda.

El asunto es el siguiente. Dispongo de una tabla categorias con los siguientes atributos

tabla categorias
Código:
id,  categoria_id, Nombre
40, 	0, 		'Ecologia'
41, 	40,	 	'Educación ambiental'
42, 	40, 	         'Desarrollo Sustentable'
43, 	40,	 	'Generales'
49, 	0, 		'Gloables'
51, 	0,		 'Recursos'
52, 	51, 	       ' Recursos Hídricos'
53, 	0,		 'Política'
54, 	0, 		'Legislación Ambiental'
55, 	0, 		'Economía y Empresas'
56, 	55, 	       'Responsabilidad Social Ambiental'
57, 	52, 	       'Acuífero Guarani'
58, 	0, 		'Contaminación'
59, 	58, 	      ' Minería'
60, 	58,		'Pasteras y Papeleras'
61, 	55,		'Economía Ambiental'
62, 	0, 		'Modelo Agrario'
63, 	62, 	       'Transgénicos'
64, 	0, 		'Para Reflexionar'
65, 	0, 		'Cambio Climático'
66, 	0, 		'Biodiversidad y Ecosistemas'
67, 	0, 		'Energía'
Estas categorias son utilizadas en difrentes tipo de post y son asignadas en la tabla categorias_post
Código:
id,      categoria_id,       post_id
713, 40, 482
712, 40, 494
74, 41, 8
89, 41, 16
275, 41, 23
367, 41, 24
443, 41, 25
274, 41, 26
444, 41, 27
446, 41, 30
455, 41, 33
391, 41, 37
70, 42, 5
76, 42, 9
77, 42, 10
64, 42, 11
83, 42, 12
81, 42, 13
87, 42, 15
90, 42, 16
91, 42, 17
95, 42, 21
251, 42, 22
445, 42, 27
691, 42, 43
141, 42, 96
697, 42, 121
663, 42, 169
249, 42, 385
649, 42, 390
270, 42, 391
621, 42, 394
603, 42, 399
193, 42, 422
329, 42, 442
485, 42, 464
201, 42, 469
529, 43, 1
97, 43, 2
134, 43, 3
69, 43, 4
71, 43, 6
73, 43, 7
92, 43, 18
93, 43, 19
94, 43, 20
442, 43, 28
441, 43, 29
174, 43, 31
316, 43, 32
466, 43, 35
506, 43, 36
467, 43, 38
Los post pueden ser asignados con categorias de tipo padre o de alguna descendencia, lo que yo estaba haciendo era guardar en un array el nombre de la categoria, los datos del post y los hijos de la siguiente manera:

Código PHP:


function _list_by_categorias(){
          global 
$DbConn;
          
//Necesitamos buscar en la tabla categorias_post
          //los post asignados y separados por tipo de post
          
            
          
$sql 'SELECT * FROM categorias where categoria_id = 0';
          
          
$res $DbConn->query($sql);
          
$i 0;
          while(
$row $DbConn->fetchAssoc($res)){
            
$categorias_post[$i] = $row;
            
$categorias_post[$i]['post'] = $this->getPostByCategoriaId($row['id']);
            
$categorias_post[$i]['sub'] = $this->getCategoriasHijos($row['id']);
            
$i++;
          }
          
                    
        return 
$categorias_post
      }
      
      
      function 
getCategoriasHijos($idCategoria){
              global 
$DbConn;
            
$sql 'SELECT * FROM categorias WHERE  categoria_id = '.$idCategoria ;
              if(!
$res $DbConn->query($sql))echo mysql_error();
            
$i 0;    
                while(
$dat $DbConn->fetchAssoc($res)){
                    
$data[$i] = $dat;
                    
$data[$i]['post'] = $this->getPostByCategoriaId($dat['id']);
                    
$data[$i]['sub'] =$this->getCategoriasHijos($data[$i]['id']);
                    
$i++;
                }
                
                    
                 
            return 
$data;    
      }
      function 
getPostByCategoriaId($catId){
          global 
$DbConn;
          
$sql 'SELECT post_id, titulo FROM categorias_post AS tcat
                LEFT JOIN categorias AS tc ON tcat.categoria_id = tc.id
                LEFT JOIN post AS tp ON tcat.post_id = tp.id
                WHERE tcat.categoria_id ='
.$catId.' AND tipo_id = 2';
          
$res $DbConn->query($sql);
          
$i 0;
          while(
$row $DbConn->fetchAssoc($res)){
              
$data[$i]=$row;
              
$i++;
          }
          return 
$data;
      } 
que me da como resultado un array de este estilo:

Código:
(
    [0] => Array
        (
            [id] => 40
            [categoria_id] => 0
            [Nombre] => Ecologia
            [post] => 
            [sub] => Array
                (
                    [0] => Array
                        (
                            [id] => 41
                            [categoria_id] => 40
                            [Nombre] => Educación ambiental
                            [post] => Array
                                (
                                    [0] => Array
                                        (
                                            [post_id] => 8
                                            [titulo] => El desarrollo de una política ambiental
                                        )

                                    [1] => Array
                                        (
                                            [post_id] => 16
                                            [titulo] => Promoviendo una educación hacia el desarrollo sostenible
                                        )

                                    [2] => Array
                                        (
                                            [post_id] => 23
                                            [titulo] => Educación ambiental y desarrollo humano
                                        )

                                    [3] => Array
                                        (
                                            [post_id] => 24
                                            [titulo] => En búsqueda de una educación ambiental
                                        )

                                    [4] => Array
                                        (
                                            [post_id] => 25
                                            [titulo] => La educación ambiental como medio para una nueva ética
                                        )

                                    [5] => Array
                                        (
                                            [post_id] => 26
                                            [titulo] => Educación ambiental un intento de optimizar caminos
                                        )

                                    [6] => Array
                                        (
                                            [post_id] => 27
                                            [titulo] => La educación ambiental, vía hacia el desarrollo sostenible
                                        )

                                    [7] => Array
                                        (
                                            [post_id] => 30
                                            [titulo] => La educación y la gestión ambiental
                                        )

                                    [8] => Array
                                        (
                                            [post_id] => 33
                                            [titulo] => La evolución del concepto de educación ambiental
                                        )

                                    [9] => Array
                                        (
                                            [post_id] => 37
                                            [titulo] => Historia de la educación ambiental
                                        )

                                )

                            [sub] => 
                        )

                    [1] => Array
                        (
                            [id] => 42
                            [categoria_id] => 40
                            [Nombre] => Desarrollo Sustentable
                            [post] => Array
                                (
                                    [0] => Array
                                        (
                                            [post_id] => 5
                                            [titulo] => Los beneficios del desarrollo sostenible
                                        )

                                    [1] => Array
                                        (
                                            [post_id] => 9
                                            [titulo] => Desarrollo Sustentable
                                        )

                                    [2] => Array
                                        (
                                            [post_id] => 10
                                            [titulo] => Conciencia y Responsabilidad
                                        )


                                )

                            [sub] => 
                        )


                )

        )