Проблема с подсчетом файлов в разделе, в котором есть еще подразделы, и в которых могут быть еще подразделы и т.д.
Все хранится в базе данных. Есть две таблицы: категории загрузок `loads_cats` и сами загрузки `loads`.
Структура таблицы `loads_cats`
`id` хранится ид раздела
`id_cat` ид раздела в котором он находится, если на главной, то ноль
`name` имя раздела
Структура таблицы `loads`
`id` хранится ид файла
`id_cat` ид раздела
`name` имя файла
Следующим кодом я хочу вывести все разделы которые находяться на главной загрузок(т.е. ид раздела '0')
и вывести рядом количество файлов в разделах
$result = mysql_query("SELECT * FROM `loads_cats` WHERE `id_cat` = '0'");
while($row = mysql_fetch_assoc($result)){
$files = mysql_result(mysql_query("SELECT COUNT(`id`) FROM `loads` WHERE `id_cat` = ".$row['id'].""), 0);
echo '<a href="loads/?act=view&id='.$row['id'].'">'.$row['name'].'</a> ('.$files.')<br/>';
}
Но, этим запросом можно узнать только количество файлов в данных разделах, а не в включенных в них подразделов.
Надеюсь, что кто-то мне поможет 
сделай функцию которая считает количество файлов в текущей папке, и которая при обнаружении подпапки вызывают саму себя для подсчета файлов в подпапке
25 Авг 2010, 14:46mides,
function x($args)
{
if($condition)
{
//do something
}
else
{
return x($args2);
}
}
Общая схема рекурсивной функции, ну в зависимости от восходящая/нисходящая.
Поначалу для понимания туговато, хорошо помогает талмуд по алгоритмам всяким, ручка и лист бумаги для разбирания примеров
сделал вот так, но что-то неверно, return нужно где-то использовать наверно т.к. выводит количество только для одного раздела, но выводит его уже правильно =), не могли бы подправить
$check_dir = mysql_query("SELECT (`id`) FROM `loads_cats` WHERE `id_cat` = '$id'");
while($row = mysql_fetch_assoc($check_dir)){
$result = mysql_result(mysql_query("SELECT COUNT(*) FROM `loads` WHERE `id_cat` = '".$row['id']."'"), 0);
echo $result;
}
Переделай БД на nested sets, тогда можно получить список "папок-листьев" и на основе их id сделать COUNT(*) FROM loads WHERE id_cat IN (<тут список id листьев>)
27 Авг 2010, 11:48