El asunto es el siguiente. Dispongo de una tabla categorias con los siguientes atributos
tabla categorias
Código:
Estas categorias son utilizadas en difrentes tipo de post y son asignadas en la tabla categorias_postid, 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'
Código:
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: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
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;
}
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] => ) ) )