Nicknamed
Зарегистрирован: 27.09.2004 Сообщения: 13 Откуда: Россия
|
Добавлено: Вс Дек 05 2004 00:51 Заголовок сообщения: Выборка из MySQL? |
|
|
Помогите, плз, а то я задолбался уже!
Поясню ситуацию вкратце.
Есть некая древовидная структура (ну например, форум) вида
"сообщение 1"
|
--- "потомок 1 сообщения 1"
--- "потомок 1 потомка 1"
"сообщение 2"
И так далее.
Вся эта хрень хранится в базе. Нужно сделать выборку так, чтобы сверху оказались самые свежие темы и при этом не нарушилась древовидная структура.
Я попробовал след. таблицу:
ID| parent | date
---|---------|-----
1 | 0 | 1
2 | 1 | 2
3 | 1 | 5
4 | 0 | 3
5 | 4 | 4
6 | 5 | 6
Где parent=0 означает, что сообщение не имеет предка, а другой номер указывает на ID предка. Цифры в дате означают свежесть - чем больше, тем свежее.
Подскажите, как это можно обработать на php. Обычный SELECT не помогает, группировки не подходят, вроде бы как надо писать рекурсию, но не знаю, как конкретно.
Нужна помощь! _________________
|
|
Moby
Зарегистрирован: 19.11.2004 Сообщения: 268
|
Добавлено: Пн Дек 06 2004 13:53 Заголовок сообщения: рекурсия спасёт мир... |
|
|
верно понимаешь. ну точнее, можа есть и другие более красивые решения этой задачи, просто я не копал так глубоко и сигда использовал рекурсию в подобного рода задач.
итак, что имеем:
- имеем стандартную базу Forum: ID, ParentID, и Date.
делаем следующую рекурсивную функцию:
Код: |
function makedir($ParentID, $sep) {
$sql = 'select ID FROM Forum WHERE ParentID='.$ParentID.' ORDER BY Date DESC';
$query = mysql_fetch_array($sql);
while ($row = mysql_fetch_array($query)) {
echo $sep.' '.$row['ID'];
makedir($row['ID'], $sep.='-');
}
}
|
вот те простейший пример рекурсивного построения дерева. функция строит один уровень дерева и вызывает себя для построения входящего уровня. вызывать такую ф-ию изначально надо с параметрами: ParentID=0 $sep=''; что такое $sep - надеюсь понятно? _________________ Профи - это оборзевший ламмер |
|