Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Post ID менять не надо, а сделать его счетчиком и примари 17.06.03 21:26 Число просмотров: 1346
Автор: amirul <Serge> Статус: The Elderman
|
> Ситуация следующая: > я изначально наивно пологал, что сабж выполняется, но Мое имхо:
Сами данные не сортируются, сортируется индексный файл. Как аналогию можно представить связный список. Последовательность нод этого списка в памяти может быть любой, но при помощи связей список можно отсортировать по любому критерию не меняя положения самих нод.
> поговорив с умными людьми, которые мне сообщили, что это не > часть sql и поэтому не стоит опираться на физическое > представление базы данных ( хотя проведя ряд тестов, я > заметил именно сабжевое поведение mysql). Таких индексных файлов может быть много, поэтому таблица может быть одновременно отсортирована по многим полям. Соответственно может быть произведен эффективный поиск по любому из них или по их комбинации.
> если это не так, то возникает вопрос как реализовать > древовидную структуру форума. Можно вводить разные поля, Вообще то ветвистые деревья (больше двух детей) реализуются хранением в каждой ноде списка указателей на детей. В твоем случае нужно нечто вроде branch id для каждого поста. Можно назвать его и thread, только я привык понимать под этим словом все дерево, начиная от корня, а в данном случае оно хранит только ветку со своими наследниками. БранчИД тоже надо делать в виде счетчика, чтоб каждый новый создаваемый бранч имел новый id. В записи для поста хранить кроме собственного branch id еще и childs branch id.
Работать это должно так. При создании поста (а можно и при первом ответе на него) ему в childs branch id записывается новый (уникальный) id из счетчика. Таким образом создается новая ветка в дереве. Когда на пост с валидным БранчИД дается ответ, этому ответу присваевается БранчИД со значением child branch id своего родителя. Ну и дальше читай с начала этого параграфа :-)
Для удобства навигации по дереву можно добавить parent post id. Не branch id, так как в родительской ветке может быть много братьев (родительского поста) и тогда непонятно к какому именно относится данный пост.
При такой схеме весь форум тоже может быть представлен в виде ветки например с ID = 1, доски - дети форума, ну соответсвенно все треды - дети досок.
Выбрать все дерево одним запросом не получится (насколько я помню SQL не поддерживает рекурсию). Но с другой стороны выборка-то будет делаться из php или perl-а, который вполне способны на оную.
> Предложения, коментарии ? После добавления поста не надо никаких апдейтов. А сортировать посты с одинаковым branch id можно например по post id или по времени или как угодно еще.
|
|
|