Z bazy MySQL pobierane są dane:
Kod
ID | type | sc
a następnie przypisywane do tablicy numerycznej (nie asocjacyjnej) $CAT. Jeśli kategoria jest "główna", w polu SC ma wartość "P". Jeśli jest subkategorią, znajduje się tam ID kategorii nadrzędnej.Poprawiłem trochę kod, jednak nie wiem, co wstawić w miejsce pytajników, aby nie trzeba było tworzyć dodatkowej tablicy. $cat[$x][2] być nie może, bo $x zawiera ID kategorii nadrzędnej, a w tablicy $cat kategorie posortowane są wg kolejności występowania w bazie. Jeśli będzie $cat[$i][2], pętla WHILE zapętli się.
CODE
unset($cat,$ilez,$k,$v);
//Pobieranie wszystkich kategorii
db_read('ID,type,sc','cats','cat','tn','');
$ile=count($cat);
if($ile>0)
{
//Liczenie ilości zawartości dla każdej kategorii
for($i=0;$i<$ile;$i++)
{
$ilez[$cat[$i][0]]=db_count('ID',GetCType($cat[$i][1]),' WHERE cat='.$cat[$i][0].' AND access!=2');
}
//Dodawanie ilości zawartości w subkategoriach do nadrzędnych kategorii
for($i=0;$i<$ile;$i++)
{
$x=$cat[$i][2];
while($x!='P')
{
$ilez[$x]+=$ilez[$cat[$i][0]];
$x= [
?];
}
}
//Zapis
foreach($ilez as $k=>$x)
{
if(is_numeric($x)) db_q('UPDATE '.$db_pre.'cats SET num='.$x.' WHERE ID='.$k,0);
}
unset($ilez,$cat,$k,$v);
}
//Pobieranie wszystkich kategorii
db_read('ID,type,sc','cats','cat','tn','');
$ile=count($cat);
if($ile>0)
{
//Liczenie ilości zawartości dla każdej kategorii
for($i=0;$i<$ile;$i++)
{
$ilez[$cat[$i][0]]=db_count('ID',GetCType($cat[$i][1]),' WHERE cat='.$cat[$i][0].' AND access!=2');
}
//Dodawanie ilości zawartości w subkategoriach do nadrzędnych kategorii
for($i=0;$i<$ile;$i++)
{
$x=$cat[$i][2];
while($x!='P')
{
$ilez[$x]+=$ilez[$cat[$i][0]];
$x= [

}
}
//Zapis
foreach($ilez as $k=>$x)
{
if(is_numeric($x)) db_q('UPDATE '.$db_pre.'cats SET num='.$x.' WHERE ID='.$k,0);
}
unset($ilez,$cat,$k,$v);
}
Może są lepsze sposoby? Podałem potrzebne pola tabeli "cats". Ilośc zawartości liczona jest w tabeli arts, files, links, news lub imgs, w zależności od typu. W każdej z tych tabel jest pole CAT, które zawiera ID kategorii, do której przypisana jest zawartość.
Tablica $ilez przechowuje całkowitą ilość zawartości (nie tylko przypisanej do danej kategorii, ale i w podkategoriach). Np. $ilez[2] dotyczy kategorii o ID 2.