В переписке не должно быть входящих/исходящих, вся переписка ведётся в одном месте. Слева должен находиться список с кем велась, ведётся переписка. Новые сообщения должны выделяться. Важно: если сообщение не было прочитано получателем, отправивший должен видеть прочитано/непрочитано. Самое важное: это всё должно ооочень быстро работать. --- Я понимаю, что это уже работа, потому готов заплатить, разумеется в разумных пределах. --- У меня есть модуль написанный для kasseler cms, но переписка ужасно тормозит. Список с кем ведётся переписка лежит в виде ;2;234;57; функцией explode я беру id и делаю запрос в базу, проверяю есть ли в переписке с этим юзером новые сообщения или нет. Список может состоять из десятков людей, соответственно пока функция не проверить весь список страница не загрузится, в связи с этим очень большая нагрузка на базу
на форуме уже раз 5 поднималась тема 2 таблицы 1) Messages - id, sender_id, recipient_id, title, text 2) Messages_actions - message_id, created_at, readed_at, delete_by_sender, delete_by_recipient Этого достаточно для всех описанных задач.
ну так и у меня так же, но тормозит-то невыносимо! Как узнать, что есть новые сообщения от конкретного пользователя? Делаю условие, где выполняется поиск новых сообщений от конкретного пользователя из списка в конкретной переписке. Короче это очень долго и нагружает сайт.
Gromo Я несколько привел потому, что реализовывал возможность отправки 1 сообщения многим пользователям. У каждого была строка в actions
Gromo ))))) А там было 3 варианта - конкретному чуваку, всем, или конкретной структуре. Все и структура были константами. В общем случае - ты конечно прав))))
так и сделано, в итоге запрос выглядит так $userinfo['uid'] = это, допустим мой id $user_id = это id юзера из списка Смотрим, если я получатель PHP: <?php SELECT m.id, c.author_id, c.onoff, c.incom FROM user_mess AS m LEFT JOIN user_mess_post AS c ON (m.id=c.cid) WHERE m.author_id='".$user_id."' && m.user_recipient='".$userinfo['uid']."' если я отправитель PHP: <?php SELECT m.id, c.author_id, c.onoff, c.incom FROM user_mess AS m LEFT JOIN user_mess_post AS c ON (m.id=c.cid) WHERE m.author_id='".$userinfo['uid']."' && m.user_recipient='".$user_id."' хотя incom здесь не нужен, исправлю
Урааа, вчера целый вечер писал новый алгоритм с нуля. Производительность увеличилась в десятки раз. Осталось прикрутить пару фишек.