[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как поднимают темы на форумах
NitroGenerate
Всем привет. Мучает вопрос реализации поднятия тем на форумах.
Допустим на примере ipb все темы идут по дате создания. Но старую тему, которая лежит далеко не на первой странице можно поднять вверх, да так, что тема будет вверху, но до тех пор пока не будет создана более свежая тема или до тех пор пока в старых не появятся комментарии.
То есть, после поднятия, она опять будет опускаться должным ей образом, если никто не будет проявлять интерес.
Объединяем базу тем и комментов в темах, сортировка по комментам, так реализовали стандартный порядок тем.
Теперь как реализовать поднятие ?



Спустя 7 минут, 22 секунды (28.05.2012 - 08:23) Kuliev написал(а):
Может я и не прав, но я могу предположить что сортировка идет по дате комментария! Если был свежий комментарий то тему подымаем вверх!

Спустя 7 минут, 20 секунд (28.05.2012 - 08:31) NitroGenerate написал(а):
Цитата (Kuliev @ 28.05.2012 - 05:23)
Может я и не прав, но я могу предположить что сортировка идет по дате комментария! Если был свежий комментарий то тему подымаем вверх!

О чем я и написал в первом посте на предпоследней строчке =)
Но как тему искусственно поднимают вверх и потом она снова от туда "падает" ?

Спустя 6 минут, 6 секунд (28.05.2012 - 08:37) Kuliev написал(а):
NitroGenerate
Сортируют по дате + наверное еще и время учитываю.
У самого какие мысли по этому поводу?

Спустя 18 минут, 55 секунд (28.05.2012 - 08:56) NitroGenerate написал(а):
Может создать в бд в таблице темы дополнительное поле времени.
Допустим Время_Создания(поле А) темы и Время_Поднятия(Поле Б, причем это значение никто и никогда не увидит)
При создании темы поля А и Б будут одинаковыми, unixtimestamp
И сортировка будет сначала по Б.
При ответе в теме значение А неизменно, а значение Б становится датой ответа. (следовательно топик вверх)
При поднятии темы, опять значение Б поднимается.

Может быть так ? Или бред?

Спустя 2 часа, 2 минуты, 34 секунды (28.05.2012 - 10:58) Hello написал(а):
Сотрировка тем по дате последнего комментария?

Спустя 48 минут, 6 секунд (28.05.2012 - 11:46) Игорь_Vasinsky написал(а):
нужно дату создания темы тож учитывать. может быть 10 новых тем без комментов и старая со свежем коментом - и новые темы уже повиснут.

Спустя 8 минут, 58 секунд (28.05.2012 - 11:55) Hyper написал(а):
Я это делаю так: создал в таблице ячейку с именем приоритет и просто при создании топика или при добавлении сообщения: ставится макс приоритет + 1

function increasePriory($topic)
{

$query = mysql_fetch_assoc(mysql_query("SELECT `id`, `priority` FROM `topic`
WHERE `priority` = (SELECT MAX(`priority`) FROM `topic`)"));

if ($query['id'] != $topic)
mysql_query("UPDATE `topic` SET `priority` = " . ++$query['priority'] . " WHERE `id` = ".$topic."");

}

В общем самого интересует как будет "более правильно"

Спустя 48 минут, 10 секунд (28.05.2012 - 12:44) NitroGenerate написал(а):
Игорь, а мы и учитываем....
- При создании темы, а так же при добавлении в нее комментов мы Время_Поднятия(невидимое поле) ставим текущее unixtimestamp. Получается, тема поднимается вверх.

- Затем искусственно поднимая тему мы просто Время_Поднятия ставим текущее unixtimestamp. Получается тема поднялась вверх.

Время_Поднятия - обязательное поле в бд, которое будет обязательно заплнено, при создании темы или при написании в ней комментов, по которому будет идти сортировка всех тем.
Итог: Учли время создания, последние комменты("живые" темы вверху), а так же реализовали поднятие темы и ее "плавное" падение в случае не актуальности.

Hyper - у вас интересный вариант. Но это почти тот же, что и предложенный мной. Мне кажется мой более интересный, так как, будет на 2 запроса меньше(посчтитал вложенный запрос в первом запросе за 2 запроса) из него еще можно выжать время поднятия темы biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.