Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как указать с какого id начинать отображение в ветке

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
livote
Отправлено: 14 Сентября, 2014 - 17:42:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 243
Дата рег-ции: Авг. 2012  


Помог: 0 раз(а)

[+][+]


Есть код, который выводит комменты. для примера сократил его.

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

PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT id, parent_id FROM comments");
  2.  
  3.  
  4. while($row = mysql_fetch_assoc($result)){
  5.   $comment[] = $row;
  6. }
  7.  
  8. $count = count($comment);
  9.  
  10. $i = 0;
  11.   $comment = commsort($comment);
  12.   while($i<$count){
  13.  
  14.  
  15.     $margin = $comment[$i]['level'] * 35;
  16.        
  17.  
  18.     $comments .= "<div style='margin-left: {$margin}px'>{$comment[$i]['id']}</div>";
  19.     $i++;
  20.   }
  21. echo $comments;
  22.  
  23. function commsort(&$comments, $parentComment = 0, $level = 0, $count = null){
  24.  
  25.     if (is_null($count)){
  26.       $c = count($comments);
  27.     }else{
  28.       $c = $count;
  29.     }
  30.     for($i=0;$i<$c;$i++){
  31.       if (!isset($comments[$i])) continue;
  32.       $comment = $comments[$i];
  33.       $parentId = $comment['parent_id'];
  34.       if ($parentId == $parentComment){
  35.         $comment['level'] = $level;
  36.         $commentId = $comment['id'];
  37.         $return[] = $comment;
  38.         unset($comments[$i]);
  39.         while ($nextReturn = commsort($comments, $commentId, $level+1, $c)){
  40.           $return = array_merge($return, $nextReturn);
  41.         }
  42.       }
  43.     }
  44.     return $return;
  45.  
  46. }


-----
Не следует бояться зайти за пределы того, что считается возможным – ибо именно там находится успех.
 
 Top
kotyara1979
Отправлено: 15 Сентября, 2014 - 04:32:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Окт. 2012  


Помог: 7 раз(а)




Измените подход.

Вам же известна связь комментариев с объектом комментирования?

Соответственно, делаете выборку по данному объекту комментариев верхнего уровня:

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id FROM comments WHERE `объект комментирования` = [нужный] AND parent_id IS NULL ORDER BY date_create


Далее цикл по выборке. При получении id верхней записи запускаем функцию получения по нему следующего уровня. Функцию делаем рекурсивной.

Нечто вроде.

PHP:
скопировать код в буфер обмена
  1.  
  2. function next_level($parent_id)
  3. {
  4.     $query = "select id, parent_id from comments where `объект комментирования` = [нужный] and parent_id = {$parent_id} by date_create";
  5.  
  6.    while()
  7.    {
  8.        print // выводится текущая запись
  9.        next_level($row['parent_id']);
  10.    }
  11.  
  12. }
  13.  


Собственно и все. Вчерне задача так решается.

(Отредактировано автором: 15 Сентября, 2014 - 04:36:38)



-----
Сделать можно все. Главное одеть каску.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB