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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Простейший древовидный форум

Сообщения:  [1-10]   [11-18] 

 
 автор: cheops   (30.03.2005 в 10:07)   письмо автору
 
   для: Loki   (30.03.2005 в 09:14)
 

В один приём нельзя (вернее можно, но только в MySQL 5), но можно сразу после вставки записи при помощи SQL-оператора INSERT узнать значение только что присвоенного первичного ключа при помощи функции mysql_insert_id() http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=1424

   
 
 автор: Loki   (30.03.2005 в 09:14)   письмо автору
 
   для: cheops (из ННГУ)   (29.03.2005 в 17:32)
 

Я пошел другим путем (чувствую, он мне еще аукнется:) - добавил в таблицу 3 столбца: идентификатор темы, последнее обновление темы, автор последнего обновления. Сразу возникла трудность: изначально, хочу присваивать идентификатору темы такое же число, как идентификатор первого сообщения в теме. Идентификатор сообщения - автоинкрементный. Можно ли сделать это в один прием? Или надо сначала создать запись, а затем, считав присвоенный идентификатор поля, присвоить его значение идентификатору темы?

   
 
 автор: cheops (из ННГУ)   (29.03.2005 в 17:32)
 
   для: Loki   (29.03.2005 в 15:23)
 

Лучше всё-равно создать таблицу для темы - будет проще оперировать темой - при добавлении нового поста - обновлять дату темы - она автоматически будет помещена сверху сортировкой по дате.

   
 
 автор: Loki   (29.03.2005 в 15:23)   письмо автору
 
   для: cheops   (28.03.2005 в 22:56)
 

По мере осознания появляются новые вопросы:)
Если на главной странице форума выводить не дерево, а список топиков, то как лучше отслеживать последнее обновление темы? Можно завести отдельную таблицу, как это сделано у вас, можно, наверное, завести дополнительное поле, где корневому сообщению присваивать дату последнего ответа. Я мыслю в правильном направлении или есть более изящные решения?

   
 
 автор: cheops   (29.03.2005 в 09:52)   письмо автору
 
   для: Loki   (29.03.2005 в 09:18)
 

А тут как раз проще... каждый пост действительно имеет поле id_theme, с первичным ключом темы, которому принадлежит данный пост, т.е. для каждого отдельного поста можно всегда однозначно сказать какой теме он принадлежит. Поиск сводится именно к определению этих полей - полученный списко делается уникальным (удаляются повторяющиеся поля) при помощи конструкции GROUP BY - сами темы уже выводятся в штатном порядке - рекурсивным спуском.

   
 
 автор: Loki   (29.03.2005 в 09:18)   письмо автору
 
   для: cheops   (28.03.2005 в 22:52)
 

Спасибо. До этого вроде дошел сам внимательно изучив фрагмент вашего форума.
Хотел еще спросить про поиск. В результате поиска выводится список тем, где встречается искомое слово. У меня была идея сделать рекурсивный подъем, от сообщения с искомой строкой, до родительского. Но у вас, как я понял, введено дополнительное поле id_theme. Именно по нему определяется первое сообщение темы? (Я не нашел этот фрагмент кода, поэтому и переспрашиваю). Кстати, как присваивается значение полю id_theme? предполагаю, что оно просто равно id_post первого сообщения?

   
 
 автор: cheops   (28.03.2005 в 22:56)   письмо автору
 
   для: Loki   (28.03.2005 в 16:17)
 

Вы можете за основу взять структуру таблиц в LiteForum http://www.softtime.ru/info/liteforum.php - не обязательно их копировать один в один - просто посмотреть как сделано.

PS Действительно большого разнообразия структурных форумов не наблюдается (открытых и не коммерческих разработок) - это было одной из причин, почему мы начали создание LiteForum.

   
 
 автор: cheops   (28.03.2005 в 22:52)   письмо автору
 
   для: Loki   (28.03.2005 в 17:31)
 

В отличие от линейного форума, где сообщения выводятся в порядке поступления и где их можно пометить как принадлежащие одной теме здесь следует следует разворачивать цепочку сообщений. Мы не придумали ничего лучшего как рекурсивный спуск.
Самый первый пост имеет поле id_parent = 0, ответы на этот пост в качестве значения этого поля принимают первичный ключ поста-родителя. Рекурсивная функция принимает в качестве одного из аргументов поле id_parent - в её задачи входит вывод сообщения и повторный вызов самой себя столько раз, сколько ответов было на первое сообщение, для каждого сообщения ситуация повторяется и так до тех пор, пока не дойдём до постов на которые нет ответов и для которых нет постов-потомков.

   
 
 автор: Akira   (28.03.2005 в 18:33)   письмо автору
 
   для: Loki   (28.03.2005 в 18:02)
 

Думаю cheops лучше опишет =)

   
 
 автор: Loki   (28.03.2005 в 18:02)   письмо автору
 
   для: Akira   (28.03.2005 в 17:51)
 

Э-э-э... собственно, нет у меня этого файла... и скачать не могу:)
я в данном случае теорию спрашиваю...

   

Сообщения:  [1-10]   [11-18] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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