Всем привет, объясните принцип реализации, переписки между пользователя. То-есть если пользователь авторизован я ему могу написать сообщение в ЛС, а он мне может дать ответ, и так наоборот.
@MouseZver Видео это не то, повторять, но ссылку можно если не тяжело) я умею гуглом пользоваться не однозначно... Мне нужен принцип, как ее реализовать.
в бд (mysql) надо завести таблицу с пятью полями: id, от кого, кому, дата сообщения и текст сообщения. Создаешь форму ввода сообщения - это для отправки. Заполняешь "от кого" - текущий пользователь из сессии, id - autoincrement, остальное с фронтенда приходит. Вывод всех сообщений, у которых: либо "от кого" - текущий пользователь, "кому" - выбранный пользователь, либо наоборот Соответственно тебе нужно, чтобы авторизация уже была реализована, но это уже другой вопрос. Это принципиальная схема. Чат, автообновление, порядок и прочее - это уже детали.
@valentinnew Авторизация, уже реализована, я думаю то что ты мне предложил самое минимальное что можно сделать, для переписки. А хотелось бы обширное, что либо.
я предложил принципиальную схему. Всё остальное это уже конкретная реализация. Что конкретно ты имеешь ввиду по словом "обширное"?
Есть таблица пользователей, и есть таблица сообщений Таблица сообщений: id user_id text date кладешь сообщения как полагается в таблицу, получаешь их оттуда сортируя по дате, и так же выводишь на страницу. Это если очень коротко.
Нет, чтобы в таблице сообщений не заводить это, создал отдельную таблицу переписок. Допускаю, что это не бестпрактикс, это мои мысли, как я реализовал. вот:
@valentinnew, я так прикинул, логически правильнее завести таблицу переписок. Так ты можешь фиксировать когда была начата переписка.
А чем плохо заводить таблицу переписок?) Допустим нужно получить список всех переписок? --- Добавлено --- К тому же, сообщения можно удалять.
@valentinnew А если завтра захочешь чтобы в переписках участвовало больше двух пользователей? --- Добавлено --- одна таблица - это шляпа полная хочешь - делай одну, но людям не советуй.
@TeslaFeo Хоть кто то понял меня) с одной таблицей это лажа( А как же лучше поступить? --- Добавлено --- @mahmuzar Нефигасе таблицы, честное я понял только что их несколько, но какие таблицы это одна таблица я не понял.
"Товарищ Сталин, что вы курите?" --- Добавлено --- @_ne_scaju_, по названию таблиц, ты можешь определить какая за что отвечает.
@_ne_scaju_ mahmuzar тебя правильно понял тоже) Что касается переписок: таблица "Сообщения" id_сообщения (PK AI) | Сообщение | id_пользователя (FK) | id_переписки (FK) | Таблица "Переписки" | id_переписки | и всё что тебе о ней нужно. Например id последнего сообщения и т п
@mahmuzar @TeslaFeo Если я правильно понял мне надо 2 таблицы, для работы с сообщениями, и таблица юзеров.
для того чтобы можно было переписываться - да, но нужны еще оповещения может быть еще что-то... --- Добавлено --- @mahmuzar а что за indexes?) любопытно...
@TeslaFeo, индексы один из важных моментов, ускорить поиск. http://www.mysql.ru/docs/man/MySQL_indexes.html --- Добавлено --- Ссылку не ту воткнул) исправил) --- Добавлено --- @TeslaFeo, когда-то тут приводили очень хорошие статьи, увы сейчас я не смогу найти ссылки. https://ruhighload.com/post/Работа+с+индексами+в+MySQL вот еще
@TeslaFeo да, ты прав, так и запросы и индексы проще. Но моя реализация удовлетворяет требованиям ТС'a. Для того чтобы можно было переписываться двум людям, одной таблицы достаточно. Если ТС имел ввиду что-то другое, то и объяснять надо было по другому.
@valentinnew @mahmuzar @TeslaFeo Примерно как я думаю сделать: 1. Создать первую таблицу im(for_user(кому), from_user(от кого), date(дата), num_msg(номер сообщения)) В этой таблице будут чисто хранится id пользователей и номер сообщения 2. Создать вторую таблицу message(id(автоинкримент), text(сообщение), for_user(кому), from_user(от кого), date(дата)) В этой таблице будут хранится сами сообщения от кого кому. 3. Когда user1 пишет user2 то в обе эти таблицы будет происходить запись такая: im(1, 2, date, 1) где 1 это user1, 2 это user2, date это дата, 1 количество сообщений im(2, 1, date, 0) и здесь наоборот 2 это user2, 1 это user1, date это дата, 1 количество сообщений message(1, 'blaba', 1, 2, date) Аналогично запись здесь только добавляется 3 поля. message(2, 'blaba', 2, 1, date) 4. И в таблицу users нужно будет просто добавить поле col_num_msg будет происходить подсчет всех сообщений. Вот и все что я хотел бы сделать, для начала, как вам такая идея?
а теперь составь запросы, которые ты будешь использовать на сайте и посмотри, все ли нужды будут удовлетворены. --- Добавлено --- получить последнее сообщение от пользователя, получить список всех сообщение от одного пользователя и сообщения ему, получить список собеседников и т.д.