|
|
|
| Вот пример: http://clip2net.com/page/m0/7197504
Т.е., если человек нажимает "ответить", то комментарий располагается правее того, на который он дает ответ, если ответили на него - еще правее и т.д.
Вообще, как это можно сделать? Ума не приложу... | |
|
|
|
|
|
|
|
для: lElectroHardl
(09.08.2010 в 16:23)
| | просто стройте дерево коментариев! и всё! всё исходит от родителя, и потом просто выстраиваете дочерних. | |
|
|
|
|
|
|
|
для: FINT
(09.08.2010 в 16:42)
| | А как в базе прикрепить детей к родителю коммента?
У меня структура:
id
post
author
...
Можно без примера, просто словами объяснить. | |
|
|
|
|
|
|
|
для: lElectroHardl
(09.08.2010 в 16:56)
| | id
id_parent (по умолчанию 0 если это не ответ)
post
author
в id_parent заносим id поста на который отвечаем..
а дальше просто рекурсивной функцией выводим коменты. | |
|
|
|
|
|
|
|
для: sl1p
(09.08.2010 в 17:10)
| | Что такое "рекурсивная функция"? | |
|
|
|
|
|
|
|
для: 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();
|
как-то так. | |
|
|
|
|
|
|
|
для: sl1p
(09.08.2010 в 18:56)
| | Спасибо большое. | |
|
|
|
|
|
|
|
для: sl1p
(09.08.2010 в 18:56)
| | Кол-во запросов в БД = кол-во комментов * 2. | |
|
|
|
|
|
|
|
для: sl1p
(09.08.2010 в 18:56)
| | Использовать рекурсию при запросах к БД - самый настоящий overkill. Nested sets - единственное годное решение для такого случая. | |
|
|
|
|
|
|
|
для: Саня
(09.08.2010 в 22:20)
| | а одним запросом вида SELECT id, pid FROM tree поднять всё дерево? | |
|
|
|
|
|
|
|
для: Trianon
(09.08.2010 в 22:22)
| | А что, нет? | |
|
|
|
|
|
|
|
для: Trianon
(09.08.2010 в 22:22)
| | И переложить задачу сортировки на программиста? | |
|
|
|
|
|
|
|
для: Саня
(09.08.2010 в 22:42)
| | Программист руками сортировать будет? Тогда, конечно, на него.
На сервер приложения вообще-то.
Хотя задачу сортировки можно и на сервере БД оставить:
SELECT id, pid
FROM tree
ORDER by pid, pos
|
| |
|
|
|
|
|
|
|
для: 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>';
}
}
|
| |
|
|
|