Спустя 12 минут, 33 секунды (6.11.2011 - 01:06) caballero написал(а):
проверь какие новые и выдели
Спустя 3 минуты, 33 секунды (6.11.2011 - 01:09) DeeKeiD написал(а):
А Как узнать какие темы новые для определенного пользователя?
Спустя 1 минута, 32 секунды (6.11.2011 - 01:11) caballero написал(а):
узнать где? тут что телепаты сидят?
Спустя 8 минут, 27 секунд (6.11.2011 - 01:19) DeeKeiD написал(а):
Мне нужна сама логика с примером как это делается,а не телепаты...
Спустя 12 минут, 46 секунд (6.11.2011 - 01:32) neadekvat написал(а):
Загляни к себе в кукисы (этого форума). Он добавляет в них информацию о том, какую тему ты просмотрел и в какой момент времени.
Если в одной из этих тем появляется новое сообщение, то оно отображается как новое.
Кроме того, это действительно только в течение одной сессии (это уже в бд скорее всего хранится), затем все темы считаются прочитанными.
Если в одной из этих тем появляется новое сообщение, то оно отображается как новое.
Кроме того, это действительно только в течение одной сессии (это уже в бд скорее всего хранится), затем все темы считаются прочитанными.
Спустя 18 минут, 26 секунд (6.11.2011 - 01:50) DeeKeiD написал(а):
А где хранить темы которые пользователь уже смотрел но в них нет новых сообщений?
Спустя 3 минуты, 9 секунд (6.11.2011 - 01:54) neadekvat написал(а):
Цитата (DeeKeiD @ 6.11.2011 - 02:50) |
А где хранить темы которые пользователь уже смотрел но в них нет новых сообщений? |
Еще раз. Новая сессия - кукис topic_reads очищается. Пользователь открывает тему - в кукис записывается id темы и время, когда это произошло.
Посмотри свои кукисы этого форума.
Спустя 4 минуты, 9 секунд (6.11.2011 - 01:58) Nikitian написал(а):
В отдельной табличке 3 поля: пользователь, идентификатор темы, идентификатор последнего сообщения. При выборке объединяете таблички по идентификатору темы право-левым джойном и смотрите: если идентификаторы последнего сообщения разные (лучше его тоже в табличке с темами хранить), то в этой теме произошли какие-то изменения, если одинаковые, то изменений не было.
В куки пихать всё подряд не стоит - всё, что в куках лежит, постоянно гоняется при каждом запросе к серверу. Нетолько при запросе страницы, но и для каждого ресурса - лишние накладные расходы. Как вариант, если надо много хранить на клиенте, то есть это
В куки пихать всё подряд не стоит - всё, что в куках лежит, постоянно гоняется при каждом запросе к серверу. Нетолько при запросе страницы, но и для каждого ресурса - лишние накладные расходы. Как вариант, если надо много хранить на клиенте, то есть это
Спустя 5 минут, 10 секунд (6.11.2011 - 02:03) caballero написал(а):
Цитата |
объединяете таблички по идентификатору темы право-левым джойном |
исключительно понятная фраза для новичка в программировании
не очень понимаю зачем тут кукисы
юзер пнул тему - запись в табличку - номер темы, время
дальше простые выборки
есть посты в теме с временем больше последного просмотра - значит новые
Спустя 2 минуты, 44 секунды (6.11.2011 - 02:06) neadekvat написал(а):
Цитата (caballero @ 6.11.2011 - 03:03) |
не очень понимаю зачем тут кукисы юзер пнул тему - запись в табличку - номер темы, время |
А нахрена?
Зачем весь этот хлам в бд?
IPB и PHPBB точно через кукисы делают.
Спустя 7 минут, 45 секунд (6.11.2011 - 02:13) caballero написал(а):
Цитата |
Зачем весь этот хлам в бд? |
хлам в кеше браузера ничем не лучше
а базу тоже можно подчищать
Цитата |
IPB и PHPBB точно через кукисы делают. |
думаю новичку, который даже вопрос сформулировать толком не может, будет гораздо проще и нагляднее работать все таки с данными которые можно реально увидеть протестить и все такое
вряд ли монстрообразные форумы в которых черт ногу сломит - удачный пример для подражания
Спустя 6 минут, 10 секунд (6.11.2011 - 02:20) DeeKeiD написал(а):
А что если сделать так:
юзеру добавить поле topics и в него заносить ID всех созданных тем, и тем в которых есть новые ответы, и уже исходя из этого всего выделять тему?
только как это всё реализовать я понятия не имею
юзеру добавить поле topics и в него заносить ID всех созданных тем, и тем в которых есть новые ответы, и уже исходя из этого всего выделять тему?
только как это всё реализовать я понятия не имею
Спустя 4 минуты, 53 секунды (6.11.2011 - 02:24) Nikitian написал(а):
Это получится денормализация какая-то, да и вообще, неправильно массив хранить в поле.
Спустя 2 минуты, 57 секунд (6.11.2011 - 02:27) caballero написал(а):
Цитата |
юзеру добавить поле topics |
зачем ему это поле?
отдельная табличка:
id темы
id юзера
время последного посещения
таблицы топиков и постов с временем уже должны быть (кстати а что у тебя вообще есть?)
при выборке постов проверяешь по данному юзеру время с вышеуказанной таблицы - все что старше - новое
Спустя 2 минуты, 39 секунд (6.11.2011 - 02:30) DeeKeiD написал(а):
есть:
forum_categories - категории форума
forum_forums - форумы категории
forum_topics - темы
forum_topic_replies - ответы
forum_categories - категории форума
forum_forums - форумы категории
forum_topics - темы
forum_topic_replies - ответы
Цитата |
отдельная табличка: id темы id юзера время последного посещения |
т.е эта таблица обновляется только после того как пользователь зайдёт в тему?
тогда другой вопрос, если он 1 раз зашел в тему (она отметилась как прочтенная), после было написанно ещё 2-3 сообщения, и при проверке покажет что новых сообщений нет(не будет выделения) или как?
Спустя 4 минуты, 27 секунд (6.11.2011 - 02:34) caballero написал(а):
вот и хорошо
все что тебе надо запомнить юзера топик и время
юзер у тебя в сессии время time() топик из ссылки которуб пинает юзер когда в нее входит
у тебя есть время последнего посещения бзером темы
дальше простая математика
все что тебе надо запомнить юзера топик и время
юзер у тебя в сессии время time() топик из ссылки которуб пинает юзер когда в нее входит
у тебя есть время последнего посещения бзером темы
дальше простая математика
Спустя 3 минуты, 51 секунда (6.11.2011 - 02:38) caballero написал(а):
Цитата |
тогда другой вопрос, если он 1 раз зашел в тему (она отметилась как прочтенная), после было написанно ещё 2-3 сообщения, и при проверке покажет что новых сообщений нет(не будет выделения) или как? |
ты говоришь о свеом коде как о некоем неподконтрольном существе
никто ничего не покажет и не выделит
это ты делаешь
у тебя есть данные
ты определяешь нужные - для данной логики - список новых постов
при формировании страницы заглядываешь в этот список и выделяешь - цветом размером воздушными шариками и т.д.
Спустя 3 минуты, 50 секунд (6.11.2011 - 02:42) DeeKeiD написал(а):
Тоесть надо сравнить время последнего ответа в теме (или время создания темы) с временем когда пользователь заходил в тему?
Цитата |
тогда другой вопрос, если он 1 раз зашел в тему (она отметилась как прочтенная), после было написанно ещё 2-3 сообщения, и при проверке покажет что новых сообщений нет(не будет выделения) или как? |
Почему-то мне в голову пришла такая проверка, отсюда и возник такой вопрос :)
$check_query = mysql_query("SELECT * FROM `forum_topic_view_time` WHERE `user_id` = $userID");
if(mysql_num_rows($check_query) > 0)
{
$topic_icon = '<b>New</b>';
}
else
{
$topic_icon = 'old';
}
Спустя 6 минут, 56 секунд (6.11.2011 - 02:49) caballero написал(а):
Цитата |
Тоесть надо сравнить время последнего ответа в теме (или время создания темы) с временем когда пользователь заходил в тему? |
по сути надо выбрать в переменную время последнего посещения темы
потом когда циклом вывдишь топики сравниваешь их время и получаешь какой он новый или нет
начни делать страницу тогда и поймешь что где надо написать
Цитата |
Почему-то мне в голову пришла такая проверка, отсюда и возник такой вопрос |
Не надо перепрыгивать с общих рассуждений к отфонарному (и бесмысленному) куску кода
Спустя 6 минут, 52 секунды (6.11.2011 - 02:56) DeeKeiD написал(а):
Вот, как-то так получилось...
Свернутый текст
$viewed_topics_check_query = mysql_query("SELECT * FROM `forum_user_topic_views` WHERE `user_id` = '". $user['id'] ."' AND `topic_id` = '". $topic_row['id'] ."'") or die(mysql_error());
$viewed_topics_check_row = mysql_fetch_assoc($viewed_topics_check_query);
$topic_last_reply_time_query = mysql_query("SELECT * FROM `forum_topics_replies` WHERE `forum_topics_replies_topic_id` = '". $topic_row['id'] ."'");
$topic_last_reply_time_row = mysql_fetch_assoc($topic_last_reply_time_query);
$topic_creation_time = $topic_row['forum_topics_date'];
$topic_last_reply_time = $topic_last_reply_time_row['forum_topics_replies_date'];
$user_topic_view_time = $viewed_topics_check_row['view_time'];
if($user_topic_view_time < $topic_last_reply_time || $user_topic_view_time < $topic_creation_time)
{
$topic_icon = '<b>NEW</b>';
}
else
{
$topic_icon = 'OLD';
}
Спустя 9 минут, 43 секунды (6.11.2011 - 03:06) caballero написал(а):
не надо кидатся писать код
подумай сначала что ты собираешся написать
во первых время последней выборки это одна переменная значит в запросе должно быть либо max() либо limit потому как нужно одно значение
и почему в if четыре переменных когда там всего две должно быть время последнего посещения и время текущего выводимого поста
два запроса - одна перменная и один массив
чего ты понаворотил там
подумай сначала что ты собираешся написать
во первых время последней выборки это одна переменная значит в запросе должно быть либо max() либо limit потому как нужно одно значение
и почему в if четыре переменных когда там всего две должно быть время последнего посещения и время текущего выводимого поста
два запроса - одна перменная и один массив
чего ты понаворотил там
Спустя 2 минуты, 51 секунда (6.11.2011 - 03:09) DeeKeiD написал(а):
Цитата (caballero @ 6.11.2011 - 00:06) |
и почему в if четыре переменных когда там всего две должно быть время последнего посещения и время текущего выводимого поста |
Проверка времени создания темы и времени последнего ответа, они же в разных таблицах указанны.
Спустя 33 минуты, 12 секунд (6.11.2011 - 03:42) DeeKeiD написал(а):
С выделением вроде разобрался, остался последний вопрос:
Как сделать следующее:
имеется 5 тем (тема_1,тема_2,тема_3,тема_4,тема_5)
две из них пользователь посмотрел (тема_2, тема_5)
как отсортировать темы чтоб для пользователя выглядело так
тема_1
тема_3
тема_4
тема_2
тема_5
* сортировка тем должна идти по дате(новые в верху) для просмотренных и не просмотренных тем
Код вывода тем:
Как сделать следующее:
имеется 5 тем (тема_1,тема_2,тема_3,тема_4,тема_5)
две из них пользователь посмотрел (тема_2, тема_5)
как отсортировать темы чтоб для пользователя выглядело так
тема_1
тема_3
тема_4
тема_2
тема_5
* сортировка тем должна идти по дате(новые в верху) для просмотренных и не просмотренных тем
Код вывода тем:
Свернутый текст
$nums = 20;
$page = isset($_GET['page'])?$_GET['page']:1;
$query = "SELECT COUNT(*) AS `total_topics` FROM `forum_topics` WHERE `forum_topics_forum_id` = '". $forumID ."' AND `forum_topics_sticky` = '0'";
$sql = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($sql);
$elements = $row['total_topics'];
$pages = ceil($elements/$nums);
if ($page < 1)
{
$page = 1;
}
elseif ($page > $pages)
{
$page = $pages;
}
$start = ($page-1)*$nums;
// когда у нас в таблице нет записей
if ($start < 0) $start = 0;
$query = "SELECT * FROM `forum_topics` WHERE `forum_topics_forum_id` = '". $forumID ."' AND `forum_topics_sticky` = '0' LIMIT {$start}, {$nums}";
$sql = mysql_query($query) or die(mysql_error());
while($topic_row = mysql_fetch_assoc($sql))
{
/* Выделение не просмотренных тем */
$viewed_topics_check_query = mysql_query("SELECT * FROM `forum_user_topic_views` WHERE `user_id` = '". $user['id'] ."' AND `topic_id` = '". $topic_row['id'] ."'") or die(mysql_error());
$viewed_topics_check_row = mysql_fetch_assoc($viewed_topics_check_query);
$topic_last_reply_time_query = mysql_query("SELECT * FROM `forum_topics_replies` WHERE `forum_topics_replies_topic_id` = '". $topic_row['id'] ."'");
$topic_last_reply_time_row = mysql_fetch_assoc($topic_last_reply_time_query);
$topic_creation_time = $topic_row['forum_topics_date'];
$topic_last_reply_time = $topic_last_reply_time_row['forum_topics_replies_date'];
$user_topic_view_time = $viewed_topics_check_row['view_time'];
if($user_topic_view_time > $topic_last_reply_time OR $user_topic_view_time > $topic_creation_time)
{
$topic_icon = '<img src="/images/icons/forum/no_new_posts.gif">';
$topic_name = $topic_row['forum_topics_content'];
}
else
{
$topic_icon = '<img src="/images/icons/forum/new_posts.gif">';
$topic_name = '<b>'. $topic_row['forum_topics_content'] .'</b>';
}
echo '<table width="100%" class="block_content" border="0">';
echo '<tr>';
echo '<td width="2%" align="center">'.$topic_icon.'</td>';
echo '<td width="3%" align="center">'. getTopicIcon($topic_row['forum_topics_icon']) .'</td>';
echo '<td width="40%"><a href="/forum/topic/'. $topic_row['id'] .'">'. $topic_name .'<br><i>'. $topic_row['forum_topics_description'] .'</i></a></td>';
echo '<td width="15%" align="center">'. getUserNickname($topic_row['forum_topics_author']) .'</td>';
echo '<td width="10%" align="center">n\a</td>';
echo '<td width="10%" align="center">'. $topic_row['forum_topics_views'] .'</td>';
echo '<td width="20%" align="center">n\a</td>';
echo '</tr>';
echo '</table>';
}
Спустя 8 часов, 6 минут, 7 секунд (6.11.2011 - 11:48) neadekvat написал(а):
Цитата (caballero @ 6.11.2011 - 03:13) |
хлам в кеше браузера ничем не лучше |
В каком кэше? оО
Цитата (caballero @ 6.11.2011 - 03:13) |
вряд ли монстрообразные форумы в которых черт ногу сломит - удачный пример для подражания |
А что хороший пример? Придумать свои схемы? Так тут никому не угодить: то "фу, свой велик", то "фу, за монстрами следуешь".
Цитата (caballero @ 6.11.2011 - 04:06) |
два запроса - одна перменная и один массив |
А зачем тут вообще два запроса? Монструозность тебя смущает, а два простых запроса, который просто кричат: "Объедини нас!" - нет?
Спустя 2 часа, 13 минут, 7 секунд (6.11.2011 - 14:01) caballero написал(а):
Цитата |
А зачем тут вообще два запроса? Монструозность тебя смущает, а два простых запроса, который просто кричат: "Объедини нас!" - нет? |
я могу и десять объединить а человек в трех соснах путается
пусть сначала напишет как проще чтобы хоть как то работало
а потом уже будет оптимизировать
_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©