sql - SQL:根据时间戳和聊天伙伴分组消息
问题描述
嘿,我目前正在聊天,我想显示聊天伙伴的用户列表(就像在 WhatsApp 或 Telegram 上一样),其中包含聊天伙伴名称、图片、未读消息的数量以及基于时间戳的最新消息。我正在为(Postgres)SQL 查询而苦苦挣扎。
那是表消息:
+-------+---------+-------+-------------------------------+---------+---------------+
| 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 |
+-------+---------+-------+-------------------------------+---------+---------------+
成员表:
+------+------------+-------------+
| m_id | m_nickname | m_picture |
+------+------------+-------------+
| 1 | John | selfie.jpg |
| 2 | CocoGirly | selfie2.jpg |
| 3 | MileyStar | selfie3.jpg |
| 3 | JackX | selfie4.jpg |
+------+------------+-------------+
我希望它看起来像这样(图片中不相关的消息内容和名称):
这就是我到目前为止所拥有的:
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)
非常感谢您!
解决方案
对成员表多次使用连接
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
推荐阅读
- python - 使用相关热图显示带有 seaborn 的产品价格
- php - 使用不同的键和值对多维数组进行排序
- c - 使用 if 和 else 语句编写“加法”程序
- firebase - 在 StreamBuilder 中嵌套 SliverList 时出错
- java - 单链表 add(int index, T element) 方法
- r - 模型在尝试调整 R Tidymodels 中的 xgboost 超参数时失败
- reactjs - 需要刷新浏览器以在用户登录后使用 redux 做出反应来显示数据
- python - 在 Heroku Code H10 路径“/”和“/favicon.ico”上使用 Gunicorn 服务 Flask + React 应用程序
- java - 如何在 AppEngine 中获取 Java8 的 CPU 利用率
- python - Tkinter:获取画布属性和选项值