таблица контактов, выбрать всех кто мне и кому я с количеством сообщений

myrostov

Новичок
Привет, возникла проблема оптимизировать запрос к mysql при выборе всех имеющихся контактов в таблице контактов. Вот суть:

таблица users
id | name | email

таблица messages
id | kto | komu | new

(kto|komu) - id из таблицы users
new - имеет значение 1 или 2 (2 - непрочитано получателем)

при запросе мы знаем id пользователя, например $user_id задача вывести уникальные значения всех кому я написал, кто мне написал и количество записей всего и новых соответствующих паре кто - кому. Результат должен быть:

Марина (34)
Владимир (45/2 новых)
Саша (11)

Помогите пожалуйста, если можно одним запросом
если это возможно...
 

Sokil.Dmytro

Новичок
а зачем стремиться все лепить в один запрос? иногда лучше сделать восемь простых чем один сложный. А еще есть кеширование. А еще у вас не вопрос а предложение попахать на халяву :)

Есть предложение вам написать как вы это пытаетесь решить, а над остальным подумаем
 

myrostov

Новичок
я умею только так:

SELECT kto,komu,messages.time,name,count(messages.id)
FROM messages, users
WHERE kto=".$user_id." AND users.id=komu OR komu=".$user_id." AND users.id=kto GROUP BY kto,komu ORDER BY messages.time,new DESC;

но тут не учитывается много, например если пользователь уже удалён нужно использовать LEFT JOIN .. как всё связать не понимаю...
 

myrostov

Новичок
если Вашу помощь можно получить за деньги, скажите сколько я заплачу
 

Sokil.Dmytro

Новичок
вы хотите получить данные куму я писал и кто мне писал на одной странице?
 

myrostov

Новичок
да, но с количеством сообщений всего и новых по каждой паре
 

Sokil.Dmytro

Новичок
если пользователь уже удален - добавьте поле статуса в таблицу пользователей и проверяйте не равен ли статус пользователя статусу "удален"

физически я бы такую запись не удалял - так как это нарушает целостность данных, если удаляется запись - должны быть удалены и все связанные с ней. В противном случае существует возможность что при создании нового юзера автоинкремент дает ему айдишку удаленного, и новый юзер читает все сообщения старого
 

Вурдалак

Продвинутый новичок
Если делать нормально, то надо ввести промежуточную таблицу user_id, message_id, folder_id (inbox/outbox), new. Тогда всё будет просто.
 

myrostov

Новичок
Вурдалак
получается дополнительная таблица будет дублировать каждое сообщение?
я имею ввиду количество записей будет такое же...

или я не туда думаю
 

Вурдалак

Продвинутый новичок
myrostov, сами сообщения (текст) хранятся в таблице messages. При отправке нового сообщения будет добавляться 1 запись в messages и 2 (отправителю и адресату) в промежуточную.
 
Сверху