Xwab
Форумыnavigate_nextПрограммирование на PHP

Подсчет файлов в разделе, в котором есть подразделы..
Сообщения
mides

Проблема с подсчетом файлов в разделе, в котором есть еще подразделы, и в которых могут быть еще подразделы и т.д.
Все хранится в базе данных. Есть две таблицы: категории загрузок `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&amp;id='.$row['id'].'">'.$row['name'].'</a> ('.$files.')<br/>';
}

Но, этим запросом можно узнать только количество файлов в данных разделах, а не в включенных в них подразделов.
Надеюсь, что кто-то мне поможет

25 Авг 2010, 14:39
Mars

рекурсию сделай

25 Авг 2010, 14:41
mides

Mars, это как на php организовать? объясни =)

25 Авг 2010, 14:42
wapmorgan

сделай функцию которая считает количество файлов в текущей папке, и которая при обнаружении подпапки вызывают саму себя для подсчета файлов в подпапке

25 Авг 2010, 14:46
M0rbid

mides,
function x($args)
{
if($condition)
{
//do something
}
else
{
return x($args2);
}
}

Общая схема рекурсивной функции, ну в зависимости от восходящая/нисходящая.
Поначалу для понимания туговато, хорошо помогает талмуд по алгоритмам всяким, ручка и лист бумаги для разбирания примеров

25 Авг 2010, 16:01
mides

сделал вот так, но что-то неверно, 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;
}

25 Авг 2010, 16:23
red-bull

mides, я какрас хотел это написать)

27 Авг 2010, 6:34
XsErG

Переделай БД на nested sets, тогда можно получить список "папок-листьев" и на основе их id сделать COUNT(*) FROM loads WHERE id_cat IN (<тут список id листьев>)

27 Авг 2010, 11:48
Ответить на тему