Учитывая идентификатор пользователя, получить все их каналы с получателями и предпросмотр последнего сообщения? - PullRequest
0 голосов
/ 24 апреля 2018

Возвращает список групповых чатов, который вы видите в любом приложении чата.

В примере показаны прямые сообщения, но технически более 3 пользователей могут присоединиться к каналу чата.Предположим, что нет пользовательской таблицы.

Я хочу иметь возможность передать some_user и "получить все каналы, в которых участвует some_user, с членами канала, которые не являются some_user (получателями), и последним сообщением, отправленным наканал для предварительного просмотра, упорядоченный по последнему сообщению create_at desc ".

channel
---
id(pk)

channel_user
---
channel_id(fk) | user_id

message
---
id(pk) | channel_id(fk) | sender_id | text | created_at

channel
---
1
2

channel_user
---
1 | "Elon"
1 | "Mark"
2 | "Steve"
2 | "Elon"

message
---
3 | 1 | "Elon" | "AI will destroy us all" | timestamp(late)
4 | 1 | "Mark" | "No it won't"            | timestamp(later)
5 | 2 | "Steve"| "Sup Elon"               | timestamp(latest)

Перейдите к пользователю" Elon "и получите что-то вроде:

channel_id | recipient(s)             | last_message  | last_message_sender | last_message_created_at
---
2          | "Steve" or ["Steve",...] | "Sup Elon"    | "Steve"             | timestamp(latest)
1          | "Mark" or ["Mark",...]   | "No it won't" | "Mark"              | timestamp(later)

1 Ответ

0 голосов
/ 24 апреля 2018

Я думаю, что что-то вроде следующего должно привести вас на стадион:

SELECT *
FROM
(
        SELECT m.channel_id, m.sender_id, m.text, m.created_at, row_number() over (PARTITION BY m.channel_id ORDER BY created_at desc) as message_rank
        FROM    
            channel_user cu
            INNER JOIN message m ON 
                cu.channel_id = m.channel_id
        WHERE
            cu.user_id = 'Elon'
            AND m.user_id <> 'Elon'
) sub
WHERE sub.message_rank = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...