La estructura de la tabla de la categorias es:
- id (id de la categoria)
- pid (id de la categoria padre, usado para crear subcategorias)
- nombre (el nombre de la categoria)
El elemento contiene un campo para almacenar la categoria(s):
- categoria (contiene la id de las categorias en las que se listará, si es una sería: x si son 2 o mas sería: x|x2)
El problema es que no logro que todos los niveles de las categorias del directorio muestren el valor del numero de elementos que estan listados en la categoria, tengo echa la siguiente función (uso ADOdb Library)
Código PHP:
function contarNumeroArtistas($categoria)
{
global $conn;
$num = 0;
$sql = "SELECT *
FROM categorias
WHERE pid = $categoria";
$resultado = $conn->Execute($sql);
$numResultados = $resultado->NumRows();
if($numResultados)
{
for($i=0; $i<$numResultados; $i++)
{
list($c_id, $c_pid, $c_nombre) = $resultado->fields;
$sql2 = "SELECT categoria
FROM artista";
$resultado2 = $conn->Execute($sql2);
$numResultados2 = $resultado2->NumRows();
if($numResultados2)
{
for($j=0; $j<$numResultados2; $j++)
{
list($art_categoria) = $resultado2->fields;
$categorias = explode("|", $art_categoria);
for($k=0; $k<count($categorias); $k++)
{
if($categorias[$k] == $c_id)
$num++;
}
$resultado2->MoveNext();
}
$resultado2->Close();
}
$resultado->MoveNext();
}
$resultado->Close();
}
$sql2 = "SELECT categoria
FROM artista";
$resultado2 = $conn->Execute($sql2);
$numResultados2 = $resultado2->NumRows();
if($numResultados2)
{
for($j=0; $j<$numResultados2; $j++)
{
list($art_categoria) = $resultado2->fields;
$categorias = explode("|", $art_categoria);
for($k=0; $k<count($categorias); $k++)
{
if($categorias[$k] == $categoria)
$num++;
}
$resultado2->MoveNext();
}
$resultado2->Close();
}
return $num;
}
saludos