|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Задача очень типична и думаю имеет десяток разных реализаций. Вот и мне на проекте понадобилась простые личные сообщения, т.е. простенький чат с двумя участниками. Вот как я сделал таблицу: user_id sender_id text isread date_create Максимально просто и все хорошо работает, но ест одна проблема. Помимо текста юзеру надо показать панельку с чатами в которых он принимает участие с другими пользователями. И отобразить их надо в хронологическом порядке (самый свежий чат вверху) и конечно показать сколько в этом чате непрочитанных. Как это сделать одним запросом? С одной стороны - нужна сортировка по убыванию даты создания сообщения, с другой стороны - группировка по id юзера (или user_id или sender_id). Какое есть хорошее решение, в плане что запрос будет достаточно быстрым для большого количества записей в таблице? Проект разрабатывается, поэтому поменять структуру - нет проблем. Единственное что не хотелось бы - уходить от одной таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 12:46 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab Какое есть хорошее решение Отказаться от совершенно дебильного условия "одним запросом". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 14:10 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab user_id sender_id ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 16:46 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, А сколько надо? Мне кажется это можно решить одним запросом, но пока я не понял как, допускаю что может я ошибаюсь и одним никак, собственно это и хотел узнать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 21:55 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
miksoft, Любой из, просто в зависимости от роли текущего пользователя - будет суммирование непрочитанных меняться (т.е. мне не нужно знать сколько непрочитанных сообщений которые отправил я, но нужно знать сколько новых отправили мне). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 21:58 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Версию MySQL озвучьте, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.06.2020, 22:32 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab но нужно знать сколько новых отправили мне Как нам догадаться какой смысл вы вкладываете в название user_id ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 00:16 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
miksoft azlab но нужно знать сколько новых отправили мне Как нам догадаться какой смысл вы вкладываете в название user_id ? to azlab: у чата = группы сообщений должен быть единый для них идентификатор. Если оставаться в рамках одной таблицы, то первое сообщение должно получать идентификатор чата (например, можно использовать числовое представление даты-времени на сервере, вычислять порядковый номер запросом, прикрутить UUID), а далее все последующие сообщения ветки в момент инсерта записи получают один и тот же идентификатор, присвоенный первому сообщению. Отбор сообщений осуществляется группировкой по идентификатору чата. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 12:25 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab А сколько надо? Столько, сколько сможете без появления тормозов на сервере. azlabПомимо текста юзеру надо показать панельку с чатами в которых он принимает участие с другими пользователями. И отобразить их надо в хронологическом порядке (самый свежий чат вверху) и конечно показать сколько в этом чате непрочитанных. Один запрос на текст, второй на чаты включая количество непрочитанных сообщений. Но если вы хотите, чтобы оно было динамическим, тогда чаты - отдельно, количество отдельно. Итого два-три запроса минимум. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 13:41 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
miksoft azlab но нужно знать сколько новых отправили мне Как нам догадаться какой смысл вы вкладываете в название user_id ? user_id - получатель сообщения sender_id - отправитель ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 23:55 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
у чата = группы сообщений должен быть единый для них идентификатор. Если оставаться в рамках одной таблицы, то первое сообщение должно получать идентификатор чата (например, можно использовать числовое представление даты-времени на сервере, вычислять порядковый номер запросом, прикрутить UUID), а далее все последующие сообщения ветки в момент инсерта записи получают один и тот же идентификатор, присвоенный первому сообщению. Отбор сообщений осуществляется группировкой по идентификатору чата. Да, я думал над этим, т.к. два поля user_id создают сложности. Пожалуй так и сделаю, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 23:57 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Один запрос на текст, второй на чаты включая количество непрочитанных сообщений. Но если вы хотите, чтобы оно было динамическим, тогда чаты - отдельно, количество отдельно. Итого два-три запроса минимум. Я видимо плохо объяснил, но задача только на вывод списка чатов: дальше юзер кликает по одному из юзеров - и отдельным запросом получаем список всех сообщений. Одним запросом имелось ввиду получить список чатов выстроенных в убывающем порядке с подсчитанным числом непрочитанных сообщений ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 00:01 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab user_id - получатель сообщения sender_id - отправитель ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 02:41 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab , для версии 5.7 - читайте FAQ: Выборка первой/последней записи в группах . Группа - это Код: sql 1. 2.
а сортировка - по date_create. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 07:53 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Gluck99 Интересно, как вы будете выходить их положения, если количество участников чата выйдет за рамки двух. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 07:55 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Akina Gluck99 Интересно, как вы будете выходить их положения, если количество участников чата выйдет за рамки двух. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 13:30 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab Одним запросом имелось ввиду получить список чатов выстроенных в убывающем порядке с подсчитанным числом непрочитанных сообщений Тогда это простой count(not isread) from ... group by чат order by имя desc. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 13:54 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov azlab Одним запросом имелось ввиду получить список чатов выстроенных в убывающем порядке с подсчитанным числом непрочитанных сообщений ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 14:09 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Akina azlab , для версии 5.7 - читайте FAQ: Выборка первой/последней записи в группах . Группа - это Код: sql 1. 2.
а сортировка - по date_create. Спасибо, вроде то что нужно в итоге. Финальный запрос получился такой: Код: sql 1. 2. 3. 4. 5.
(1 - id текущего юзера, который на выводе нужно проигнорить, т.к. нет чата с самим собой) Получаем список в нужном порядке и известно число непрочитаных. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 12:03 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
azlab который на выводе нужно проигнорить, т.к. нет чата с самим собой ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 12:53 |
|
Чат личных сообщений
|
|||
---|---|---|---|
#18+
Akina azlab который на выводе нужно проигнорить, т.к. нет чата с самим собой Именно потому что нет - и буду игнорить. Результат - массив IDs собеседников, т.е. или текущий юзер начал беседу или его собеседник, но в итоге - мне нужно показать список ТОЛЬКО собеседников, т.к. чата с самим собой нет. А по клику на пункт из списка подгружается переписка. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 10:59 |
|
|
start [/forum/topic.php?fid=47&fpage=19&tid=1828489]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 178ms |
0 / 0 |