Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Дата последнего сообщения
$QUERY="SELECT * FROM pmessages WHERE author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_theme, reciepent_author ORDER BY date DESC";
elseif($msgbox=='Входящие')
$QUERY="SELECT * FROM pmessages WHERE reciepent = '$user_name' AND deleted = '0' GROUP BY mes_theme, mes_author ORDER BY date DESC";
elseif($msgbox=='Режим чата')
$QUERY="SELECT * FROM pmessages WHERE reciepent = '$user_name' OR author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_author, mes_theme ORDER BY date DESC";
В таблице при выборке мы сортировали сообщения в порядке убывания... Сгруппировали по теме.. Я полагал, что первое сообщение в ответе будет сообщение с самой поздней датой.. Однако при выводе тем личных сообщений
SELECT *, MAX(`date`) AS `date` FROM pmessages WHERE author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_theme, reciepent_author
SELECT *, MAX(`date`) AS `date` FROM pmessages WHERE reciepent = '$user_name' AND deleted = '0' GROUP BY mes_theme, mes_author
SELECT *, MAX(`date`) AS `date` FROM pmessages WHERE reciepent = '$user_name' OR author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_author, mes_theme
Murtahan
Отправлено: 01 Января, 2009 - 16:13:43
Новичок
Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Botik
Не приведет ли это к тому, что будет выводится одна и та же дата для всех тем? Ведь из таблицы мы, хоть и группируем, но выбираем несколько разных тем.
Champion
Отправлено: 01 Января, 2009 - 16:38:54
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
1-а попробовать?
2-у вас же where написано...будет самая поздняя дата.
3-в том, что вы привели в начале зачем цикл? Вы делаете выборку, сортируете по убыванию, присваиваете $date последнее значение (это самая ранняя дата). Че-то странное вы сделали
Botik
Отправлено: 01 Января, 2009 - 17:17:43
Новичок
Покинул форум
Сообщений всего: 30
Дата рег-ции: Дек. 2008 Откуда: Чебоксары
Помог: 0 раз(а)
Murtahan
Нет, уже проверял.
Будет выдавать последнюю дату из группированных
Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Champion
Я не до конца привел тело цикла, оно длинное и не к чему - там построчный вывод выбранных из таблицы тем. Соответственно каждый раз $date присваивается новое значение. (Добавление) Botik
Не подумайте, что я не проверил, прежде чем напиать второе сообщение - я вместе с вами видимо не доглядел - MAX(date) должно быть без кавычек, и выводило 01.01.70.
Без кавычек все работает отлично. Спасибо. Есть второй вопрос, в продолжение темы.
$QUERY="SELECT *, MAX(date) AS 'date' FROM pmessages WHERE author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_theme, reciepent_author ORDER BY date DESC" or die(mysql_error());
elseif($msgbox=='Входящие')
$QUERY="SELECT *, MAX(date) AS 'date' FROM pmessages WHERE reciepent = '$user_name' AND deleted = '0' GROUP BY mes_theme, mes_author ORDER BY date DESC";
elseif($msgbox=='Режим чата')
$QUERY="SELECT *, MAX(date) AS 'date' FROM pmessages WHERE reciepent = '$user_name' OR author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_author, mes_theme ORDER BY date DESC";
$QUERY="SELECT *, MAX(date) AS 'date' FROM pmessages WHERE reciepent = '$user_name' OR author_user_name = '$user_name' AND deleted = '0' GROUP BY mes_author, mes_theme ORDER BY date DESC";
в таком случае одна и та же тема выводится два раза, если в ней имеются и отправленные, и полученные пользователем сообщения. Это происходит из-за группировки по Автору сообщений - ведь в таком случае авторов двое. Как обойти этот камень?
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Так я не понял - вам одна только последняя дата нужна или все, начиная с поздней? Если второе, то странно, что не туда сортируется. Выполните запрос в phpmyadmine и посмотрите, как там он возвращается.
А то, что привели не весь цикл - это правильно, а то наприводят тут кода на сотню строк бывает . Только комментик бы небольшой что дальше в цикле происходит непомешал
Murtahan
Отправлено: 01 Января, 2009 - 17:45:37
Новичок
Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Champion
нужно было выбрать все даты. После группировки и $mes_theme =mysql_fetch_array($QRETURN) логично было предположить, что в $date = $mes_theme['date'] будет присвоено дата последнего сообщения в КАЖДОЙ из тем. но почему то выводилась дата самого раннего сообщения. После рекомендаций Botik'a все встало на свои места.
Покинул форум
Сообщений всего: 29
Дата рег-ции: Янв. 2009
Помог: 0 раз(а)
Botik
пользуетесь icq? Каково было бы, если бы вы видели только входящие или отправленные сообщения? ;)
вся сложность, конечно же, не в выдоде сообщений в режиме чата, это все уже реализовано и работает. Сложность в том, что дизайном предусмотрен список тем переписки, и вот именно с темами проблема..
Что нам дадут два запроса? Как я это представляю, мы должны записать результаты обоих запросов в один массив и выводить названия тем из него? Правильно я понял вашу мысль?
Champion
Отправлено: 01 Января, 2009 - 18:37:59
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Понял, что вы хотели
select * from table group by theme having date=max(dat)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.