За последние 24 часа нас посетили 14812 программистов и 1722 робота. Сейчас ищет 631 программист ...

Как реализовать смс переписку между авторизованными пользователями сайта PHP MySQL

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 11 май 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Всем привет, объясните принцип реализации, переписки между пользователя.
    То-есть если пользователь авторизован я ему могу написать сообщение в ЛС, а он мне может дать ответ, и так наоборот.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.793
    Симпатии:
    1.330
    Адрес:
    Лень
    даже видео с ютюба есть как реализовать такую шнягу в подробностях :)
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @MouseZver
    Видео это не то, повторять, но ссылку можно если не тяжело) я умею гуглом пользоваться не однозначно...
    Мне нужен принцип, как ее реализовать.
     
  4. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    в бд (mysql) надо завести таблицу с пятью полями: id, от кого, кому, дата сообщения и текст сообщения.
    Создаешь форму ввода сообщения - это для отправки. Заполняешь "от кого" - текущий пользователь из сессии, id - autoincrement, остальное с фронтенда приходит.
    Вывод всех сообщений, у которых: либо "от кого" - текущий пользователь, "кому" - выбранный пользователь, либо наоборот
    Соответственно тебе нужно, чтобы авторизация уже была реализована, но это уже другой вопрос.
    Это принципиальная схема. Чат, автообновление, порядок и прочее - это уже детали.
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @valentinnew
    Авторизация, уже реализована, я думаю то что ты мне предложил самое минимальное что можно сделать, для переписки.
    А хотелось бы обширное, что либо.
     
  6. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    я предложил принципиальную схему. Всё остальное это уже конкретная реализация. Что конкретно ты имеешь ввиду по словом "обширное"?
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @valentinnew
    Ну принцип работы сообщений не такой как ты написал, а чуть больше.
     
  8. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    что значит "чуть больше"? Какой функционал тебе нужен? И какой принцип работы тебя интересует?
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Есть таблица пользователей, и есть таблица сообщений
    Таблица сообщений:
    id
    user_id
    text
    date

    кладешь сообщения как полагается в таблицу, получаешь их оттуда сортируя по дате, и так же выводишь на страницу. Это если очень коротко.
     
  10. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    поле забыл - кому сообщение
     
  11. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Нет, чтобы в таблице сообщений не заводить это, создал отдельную таблицу переписок.
    Допускаю, что это не бестпрактикс, это мои мысли, как я реализовал.
    вот:
    [​IMG]
     
  12. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    @mahmuzar а почему бы не завести это в таблице сообщений?
     
  13. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @valentinnew, я так прикинул, логически правильнее завести таблицу переписок. Так ты можешь фиксировать когда была начата переписка.
     
  14. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    @mahmuzar дата первого сообщения пользователю не является датой начала переписки?
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    А чем плохо заводить таблицу переписок?) Допустим нужно получить список всех переписок?
    --- Добавлено ---
    К тому же, сообщения можно удалять.
     
  16. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @valentinnew А если завтра захочешь чтобы в переписках участвовало больше двух пользователей?
    --- Добавлено ---
    одна таблица - это шляпа полная
    хочешь - делай одну, но людям не советуй.
     
  17. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @TeslaFeo
    Хоть кто то понял меня) с одной таблицей это лажа(
    А как же лучше поступить?
    --- Добавлено ---
    @mahmuzar
    Нефигасе таблицы, честное я понял только что их несколько, но какие таблицы это одна таблица я не понял.
     
  18. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    "Товарищ Сталин, что вы курите?"
    --- Добавлено ---
    @_ne_scaju_, по названию таблиц, ты можешь определить какая за что отвечает.
     
  19. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    @_ne_scaju_ mahmuzar тебя правильно понял тоже)

    Что касается переписок:

    таблица "Сообщения"
    id_сообщения (PK AI) | Сообщение | id_пользователя (FK) | id_переписки (FK) |

    Таблица "Переписки"
    | id_переписки | и всё что тебе о ней нужно. Например id последнего сообщения и т п
     
  20. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mahmuzar
    @TeslaFeo
    Если я правильно понял мне надо 2 таблицы, для работы с сообщениями, и таблица юзеров.
     
  21. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    для того чтобы можно было переписываться - да, но нужны еще оповещения :)
    может быть еще что-то...
    --- Добавлено ---
    @mahmuzar а что за indexes?) любопытно...
     
  22. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @TeslaFeo, индексы один из важных моментов, ускорить поиск. http://www.mysql.ru/docs/man/MySQL_indexes.html
    --- Добавлено ---
    Ссылку не ту воткнул) исправил)
    --- Добавлено ---
    @TeslaFeo, когда-то тут приводили очень хорошие статьи, увы сейчас я не смогу найти ссылки.
    https://ruhighload.com/post/Работа+с+индексами+в+MySQL вот еще
     
    #22 mahmuzar, 11 май 2017
    Последнее редактирование: 11 май 2017
    TeslaFeo нравится это.
  23. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    @TeslaFeo да, ты прав, так и запросы и индексы проще. Но моя реализация удовлетворяет требованиям ТС'a. Для того чтобы можно было переписываться двум людям, одной таблицы достаточно. Если ТС имел ввиду что-то другое, то и объяснять надо было по другому.
     
  24. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @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 будет происходить подсчет всех сообщений.
    Вот и все что я хотел бы сделать, для начала, как вам такая идея?
     
    #24 _ne_scaju_, 11 май 2017
    Последнее редактирование: 11 май 2017
  25. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    160
    Симпатии:
    35
    а теперь составь запросы, которые ты будешь использовать на сайте и посмотри, все ли нужды будут удовлетворены.
    --- Добавлено ---
    получить последнее сообщение от пользователя, получить список всех сообщение от одного пользователя и сообщения ему, получить список собеседников и т.д.