SQL: групповые сообщения на основе метки времени и chatpartner - PullRequest
0 голосов
/ 19 февраля 2019

Привет, сейчас я работаю в чате и хочу отобразить список пользователей участников чата (как в WhatsApp или Telegram) с именем участника чата, картинкой, количеством непрочитанных сообщений и последними сообщениями на основе отметки времени.Я борюсь с SQL-запросом ( Postgres ).

Это таблица message :

+-------+---------+-------+-------------------------------+---------+---------------+
| me_id | me_from | me_to |         me_timestamp          | me_read |  me_content   |
+-------+---------+-------+-------------------------------+---------+---------------+
|     1 |       1 |     2 | 2019-01-04 02:50:53.931637+00 | true    | hey           |
|     2 |       1 |     2 | 2019-01-04 02:57:53.931637+00 | true    | how are you?  |
|     3 |       1 |     2 | 2019-01-04 03:10:53.931637+00 | true    | you there?    |
|     4 |       1 |     3 | 2019-01-05 01:57:53.931637+00 | true    | good night    |
|     5 |       2 |     1 | 2019-01-05 02:10:53.931637+00 | false   | I am here     |
|     6 |       3 |     2 | 2019-01-05 03:57:53.931637+00 | false   | see you later |
|     7 |       3 |     1 | 2019-01-05 04:57:53.931637+00 | false   | okay          |
+-------+---------+-------+-------------------------------+---------+---------------+

таблица для member :

+------+------------+-------------+
| m_id | m_nickname |  m_picture  |
+------+------------+-------------+
|    1 | John       | selfie.jpg  |
|    2 | CocoGirly  | selfie2.jpg |
|    3 | MileyStar  | selfie3.jpg |
|    3 | JackX      | selfie4.jpg |
+------+------------+-------------+

И я хочу, чтобы это выглядело так (содержание сообщения и имена, не связанные на картинке):

enter image description here

Вот что у меня есть:

SELECT m_id,
       m_nickName,
       m_picture
FROM member
WHERE m_id IN
    ( SELECT me_to AS chatPartner
     FROM
       ( SELECT me_to
        FROM message
        WHERE me_from = 1
        GROUP BY me_to
        UNION SELECT me_from
        FROM message
        WHERE me_to = 1
        GROUP BY me_from) A)

Заранее большое спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

использовать объединение несколько раз с таблицей элементов

select m.m_nickname as my_name,m.m_picture as my_picture,
       m1.m_nickname as from_name,m1.m_picture as from_pic,
       m2.m_nickname as partner_name ,m2.m_picture  as partner_pic
             from message msg left join  member m on msg.me_id=m.m_id
              left join member m1 on msg.me_from =m1.m_id
               left join member m2  on msg.me_to=m2.m_id
...