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

Форум PHP

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

 

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

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

тема: Как сделать такую структуру комментариев?
 
 автор: lElectroHardl   (09.08.2010 в 16:23)   письмо автору
 
 

Вот пример: http://clip2net.com/page/m0/7197504
Т.е., если человек нажимает "ответить", то комментарий располагается правее того, на который он дает ответ, если ответили на него - еще правее и т.д.
Вообще, как это можно сделать? Ума не приложу...

  Ответить  
 
 автор: FINT   (09.08.2010 в 16:42)   письмо автору
 
   для: lElectroHardl   (09.08.2010 в 16:23)
 

просто стройте дерево коментариев! и всё! всё исходит от родителя, и потом просто выстраиваете дочерних.

  Ответить  
 
 автор: lElectroHardl   (09.08.2010 в 16:56)   письмо автору
 
   для: FINT   (09.08.2010 в 16:42)
 

А как в базе прикрепить детей к родителю коммента?
У меня структура:
id
post
author
...
Можно без примера, просто словами объяснить.

  Ответить  
 
 автор: sl1p   (09.08.2010 в 17:10)   письмо автору
 
   для: lElectroHardl   (09.08.2010 в 16:56)
 

id
id_parent (по умолчанию 0 если это не ответ)
post
author

в id_parent заносим id поста на который отвечаем..
а дальше просто рекурсивной функцией выводим коменты.

  Ответить  
 
 автор: lElectroHardl   (09.08.2010 в 18:11)   письмо автору
 
   для: sl1p   (09.08.2010 в 17:10)
 

Что такое "рекурсивная функция"?

  Ответить  
 
 автор: sl1p   (09.08.2010 в 18:56)   письмо автору
 
   для: lElectroHardl   (09.08.2010 в 18:11)
 

Что такое "рекурсивная функция"?
функция которая вызывает сама себя.
---------------------------------------------------------------------
id
id_parent (по умолчанию 0 если это не ответ)
post
author


<?
function print_comments($pid 0) {
    
$res mysql_query("SELECT * FROM comments WHERE id_parent = {$pid}");
    if(
$res && mysql_num_rows($res)) {
        echo 
'<ul style="margin-left:20px">';
        while(
$r mysql_fetch_assoc($res)) {
            echo 
"<li>".htmlspecialchars($r['author']).": ".htmlspecialchars($r['post'])."</li>";
        }
        
print_comments($r['id']);
        echo 
'</ul>';
    }
}
print_comments();


как-то так.

  Ответить  
 
 автор: lElectroHardl   (09.08.2010 в 19:28)   письмо автору
 
   для: sl1p   (09.08.2010 в 18:56)
 

Спасибо большое.

  Ответить  
 
 автор: nikita2206   (09.08.2010 в 20:23)   письмо автору
 
   для: sl1p   (09.08.2010 в 18:56)
 

Кол-во запросов в БД = кол-во комментов * 2.

  Ответить  
 
 автор: Саня   (09.08.2010 в 22:20)   письмо автору
 
   для: sl1p   (09.08.2010 в 18:56)
 

Использовать рекурсию при запросах к БД - самый настоящий overkill. Nested sets - единственное годное решение для такого случая.

  Ответить  
 
 автор: Trianon   (09.08.2010 в 22:22)   письмо автору
 
   для: Саня   (09.08.2010 в 22:20)
 

а одним запросом вида SELECT id, pid FROM tree поднять всё дерево?

  Ответить  
 
 автор: nikita2206   (09.08.2010 в 22:35)   письмо автору
 
   для: Trianon   (09.08.2010 в 22:22)
 

А что, нет?

  Ответить  
 
 автор: Саня   (09.08.2010 в 22:42)   письмо автору
 
   для: Trianon   (09.08.2010 в 22:22)
 

И переложить задачу сортировки на программиста?

  Ответить  
 
 автор: Trianon   (10.08.2010 в 01:49)   письмо автору
 
   для: Саня   (09.08.2010 в 22:42)
 

Программист руками сортировать будет? Тогда, конечно, на него.

На сервер приложения вообще-то.

Хотя задачу сортировки можно и на сервере БД оставить:

SELECT id, pid 
  FROM tree 
  ORDER by pid, pos

  Ответить  
 
 автор: sl1p   (10.08.2010 в 01:56)   письмо автору
 
   для: Trianon   (10.08.2010 в 01:49)
 

а как тогда вывести это всё в виде дерева?

как-то так чтоли:

<?
$res 
mysql_query("SELECT *
  FROM tree  
  ORDER by pid, pos"
);
$tree = array();
while(
$r mysql_fetch_assoc($res)) {
    
$tree[$r['id']] = $r;
}
function 
print_comments($pid 0) {
    global 
$tree;
    if(isset(
$tree[$pid])) {
        echo 
'<ul>';
        foreach(
$tree[$pid] as $idCom => $r) {
            echo 
'<li>'.htmlspecialchars($r['author']).': '.htmlspecialchars($r['post']).'</li>';
            
print_comments($idCom);
        }
        echo 
'</ul>';
    }
}

  Ответить  
Rambler's Top100
вверх

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