Ветвление в форуме.
Сейчас сделано так:
- тема(сообщение 1)
- (сообщение 2 ответ на 1)
- (сообщение 3 ответ на 1)
- (сообщение 4 ответ на 2)
- (сообщение 5 ответ на 2)
Все сортируется по дате.
Но нет ветвления. Мне нужно, чтобы был отступ слева(определенного размера) и нормальная сортировка.
То есть вот так:
- тема(сообщение 1)
- (сообщение 2 ответ на 1)
- (сообщение 4 ответ на 2)
- (сообщение 5 ответ на 2)
- (сообщение 3 ответ на 1)
Как это сделать?
p.s. прошу прощения, если вопрос непонятен.
Для Oracle есть хорошее решение проблемы - CONNECT BY PRIOR.
В MySql придется писать рекурсию и делать несколько запросов, например так:
Код:
function ShowAnswers($post_id,$depth) {
$r=mysql_query("SELECT * FROM post
WHERE answer_to='$post_id' AND другие условия");
while ($a=mysql_fetch_assoc($r) {
print_r($a); // Допустим, это вывод сообщения
ShowAnswers($a["post_id"],$depth+1);
}
}
$r=mysql_query("SELECT * FROM post
WHERE answer_to='$post_id' AND другие условия");
while ($a=mysql_fetch_assoc($r) {
print_r($a); // Допустим, это вывод сообщения
ShowAnswers($a["post_id"],$depth+1);
}
}
То есть. Для каждого сообщения мы выбираем все ответы. Каждый ответ - это тоже сообщение, по этому, для каждого сообщения .... и так пока ответов не будет
Спасибо, разобрался! :)
http://detail.phpclub.ru/article/2002-06-03 . тогда нет рекурсии..
вообще, деревья в БД удобно хранить так: