Вывод списка контактов пользователя

Danon_13

Новичок
Всем привет
пишу простенькую соц сеть и столкнулся с проблемой нужно вывести контакты пользователя (т.е. тех, кому пользователь писал сообщения)

вывести вроде получилось вот таким запросом

SELECT DISTINCT * FROM
( SELECT users.id, users.login, users.name, users.surname, users.sex, users.img, users_online_status.time
FROM users
INNER JOIN users_online_status ON users.id = users_online_status.id
INNER JOIN messages ON users.id = messages.id_recipient OR users.id = messages.id_sender
WHERE users.id <> '1' AND (messages.id_sender = '1' OR messages.id_recipient = '1')
ORDER BY messages.time DESC) as t

т.е. сначала получаем список контактов и сортируем его ( чтоб получить список пользователей в порядке написания им сообщений ну и разумеется учитывать пользователей которые сами могли написать без ответа и которым сам пользователь мог написать (messages.id_sender = '1' OR messages.id_recipient = '1')
и потом выбор уникального сочетания DISTINCT


НО
нужно ведь еще учитывать количество непрочитанных сообщений (count where messages.status = 1) и в идеале выводить еще и время последнего сообщения текст для каждого контакта пользователя

безусловно как вариант сделать 20 подзапросов (по числу контактов пользователя на лист) но это ведь будет грузить бд

Поэтому прошу помощи
как правильно организовать вывод списка контактов пользователя (по сообщениям) к ним же вывод последнего написанного сообщения и количество непрочитанных сообщений

Для примера если не ошибаюсь вконтакте выдает сразу список контактов пользователя и сообщений

заранее благодарю
 

Adelf

Administrator
Команда форума
заведи отдельно таблицу контактов пользователя. там же можно денормализованно хранить количество прочитанных/непрочитанных сообщений
 

Adelf

Administrator
Команда форума
Если тебя пугают такие сложности, то тебе пока рано писать социальные сети.
 

Danon_13

Новичок
дело было не в сложности - я всё решил слегка переделанным запросом - кому интересно - скину

непрочитанные сообщения хранятся в той же бд у них просто статусы меняются 1 - не прочитано 2 - прочитано
 
Сверху