Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как определить кол-во записей для родителей у разделов
 
 автор: Terri   (02.11.2006 в 13:54)   письмо автору
 
 

Имеется таблица разделов стандартного типа

id parent name count


id - айди номер раздела
parent - хранит айди номер родителя
name - название раздела
count - кол-во записей разделе

так вот, нужно какимто образомм для каждого раздела вычислить кол-во записей?

можно конечно пройтись циклом по всем разделам и определить кол-во записей, но это былобы неправельно
т.к нужно чтобы и родитель знал сколько записей имеется в его подразделах

иначе например если я как написал выше пройдясь циклом по всем разделам, определив напимер у подраздела
столько то записей а если у родителя нет записей то получится что родитель не имеет нисколько запией а подраздел
имеет, а надо чтобы родитель занл все записи со всех его подразделов.

Может кто уже сталкивался с этой проблемой, просто пока сам немогу понять алгоритма

Уровень разделов не ограничен.

   
 
 автор: cheops   (02.11.2006 в 16:22)   письмо автору
 
   для: Terri   (02.11.2006 в 13:54)
 

Если каталоги организованы в виде дерева - нужно рекурсивно спускаться по списку каталогов и подсчитывать количество записей в каждом из подкаталогов.

   
 
 автор: Terri   (03.11.2006 в 17:16)   письмо автору
 
   для: cheops   (02.11.2006 в 16:22)
 

а нигде случайно нет примера, или может кто-то уже решал даный вопрос, сам я пока могу только пройтись по всем разделам и определить кол-записей, но как чтобы у родителей ещё высчитывались, для меня пока ещё сложно

   
 
 автор: Trianon   (03.11.2006 в 17:39)   письмо автору
 
   для: Terri   (03.11.2006 в 17:16)
 

<? 
$sql 
"SELECT id, parent, name FROM tab"
$res mysql_query($sql) or die("Error in $sql: ".mysql_error()); 
$tree = array(); $names = array(); 
while(
$row mysql_fetch_row($res)) 

    list(
$id$parent$name) = $row
    
$tree[$parent][] = $id
    
$names[$id] = $name


function 
recur_count($tree$p)
{
    
$cnt =0
    if(isset(
$tree[$p]))
      for(
$cnt=1$idx 0$idx count($tree[$p]); $idx++) 
        
$cnt += recur_count($tree$tree[$p][$idx]);
    return 
$cnt;
}
?>

   
 
 автор: Terri   (03.11.2006 в 18:35)   письмо автору
 
   для: Trianon   (03.11.2006 в 17:39)
 

Trianon, спасибо, токо как пользоваться несмог понять при запуске показывается ошибка
Parse error: parse error, unexpected T_FOR in c:\server\www\script.php on line 22

кстати, запускал таким образом, просто с низу добавил

echo recur_count($tree, $p);

а вверху поменл на свою таблицу

   
 
 автор: Trianon   (03.11.2006 в 19:06)   письмо автору
 
   для: Terri   (03.11.2006 в 18:35)
 

малость ошибся. Закрывающую скобку забыл в конце
if(isset($tree[$p]))

В вызове нужно в качестве $p указывать id корневого узла.

   
 
 автор: Terri   (03.11.2006 в 19:08)   письмо автору
 
   для: Trianon   (03.11.2006 в 17:39)
 

насчёт ошибки я разобрался, спасибо

вообщем то вроде разобрался, но я так понял данный код работает только с двух уровневыми разделами, а как если с многоуровневыми?

   
 
 автор: Trianon   (03.11.2006 в 19:11)   письмо автору
 
   для: Terri   (03.11.2006 в 19:08)
 

Число уровней ничем не ограничено.
(В разумных пределах. )

   
 
 автор: Terri   (03.11.2006 в 19:40)   письмо автору
 
   для: Trianon   (03.11.2006 в 19:11)
 

понятно

как я понимаю, правельно нужно делать так, сперва пройтись по всем записям для каждого раздела посчитать кол-во записей их можно занести в массив для начала к примеру ид_раздела=кол-во записей а далее уже использовать ваш приведённый код, где потом уже из массива ид_раздела=кол-во высчитывать кол-во записей для родителей.

правдо ещё немогу ваш код переворить, ну вроде что-то уже стал понимать

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования