Que tal, tengo un problema, estoy creando un directorio y necesito contar el numero de elementos que esten dentro de una categoria, un elemento puede estar registrado en varias categorias.
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;
}
alguien tiene alguna idea para solucionarlo?
saludos