【发布时间】:2012-01-06 18:19:21
【问题描述】:
我有两张表与这个问题有关: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) - 会话按其最近的消息 ID 排序(即:按
messages.id desc排序)
不幸的是,我可以找到的所有查询帮助似乎都与 MySQL 相关,而这在 PostgreSQL 中不起作用。我找到的最接近的是this answer on StackOverflow,它给出了select distinct on (...) 语法的示例。但是,除非我只是做错了,否则鉴于我需要使用该方法的分组约束,我似乎无法以正确的方式排序结果。
【问题讨论】:
标签: postgresql join left-join