У меня есть две таблицы, относящиеся к этому вопросу: conversations
имеет много messages
. Основная структура (только с соответствующими столбцами) выглядит следующим образом:
conversations (
int id (PK)
)
create table conversation_participants (
int id (PK),
int conversation_id (FK conversations),
int user_id (FK users),
unique key on [conversation_id, profile_id]
)
create table messages (
int id (PK),
int conversation_id (FK conversations),
int sender_id (FK users),
int recipient_id (FK users),
text body
)
Для каждой записи разговора, с учетом user_id
Я хочу получить:
- все разговоры, в которых участвовал пользователь (т. Е.
conversations.*
)
- присоединился к самому последнему соответствующему сообщению (т. Е.
order by messages.id desc limit 1
)
- разговоров, упорядоченных по их последнему идентификатору сообщения (т.е. упорядочены по
messages.id desc
)
К сожалению, вся справочная информация по запросам, которую я могу найти для чего-либо подобного, относится к MySQL, а в PostgreSQL это не работает. Самое близкое, что я нашел, это этот ответ по StackOverflow , который дает пример синтаксиса select distinct on (...)
. Однако, если я просто делаю это неправильно, я не могу выстроить результаты в правильном порядке, учитывая ограничения группировки, которые мне нужны с этим методом.