Обмен личными сообщениями

Рейтинг: 0Ответов: 1Опубликовано: 02.04.2015

Есть таблица messages и в ней следующие поля. id, toid, fromid, hash, status, date. Собственно сам вопрос. Как реализовать следующее. Нужно отобразить последнюю переписку с пользователями, вывести как в Вконтакте. Т.е к примеру, я юзер с ид 1, кто-то юзер с ид 2, а кто-то третий с ид 3. Я переписывался с ними и мне нужно вывести последнюю переписку с этими пользователями.

Ответы

▲ 1

Так:

select max(id) as id, opponentid
from (
  select max(id) as id, toid as opponentid
  from messages
    where fromid = $id
  group by toid
  union all
  select max(id), fromid
  from messages
    where toid = $id
  group by fromid
) opponents
group by opponent

Непосредственно текст сообщения (и прочие необходимые атрибуты) получается из соединения messages с данным запросом по id.

ЗЫ Про индексы по toid и fromid (в отдельности) не забудьте.