如何在PostgreSQL数据库中创建聊天,查询聊天列表以及未读消息的数量

问题描述 投票:0回答:1

大家早上好
我有一个 PostgreSQL 表,指定两个人之间的聊天。

柱表:
id (主键)
professional_id (外键)
request_id (外键)
留言
创建者 (外键)
创建于
阅读于

我需要有聊天列表,对于每个聊天,我需要有未读消息的数量(即 read_at IS NULL)。

这是获取该请求的聊天列表的查询

SELECT
rm.professional_id,
CONCAT(u.first_name, ' ', u.last_name) AS professional_full_name,
FROM request_messages AS rm 
LEFT JOIN users AS u ON (rm.professional_id = u.id) 
WHERE rm.request_id = $1 
GROUP BY rm.professional_id, professional_full_name

我需要在第三列中显示 COUNT,其中 read_at IS NULL

database postgresql database-administration
1个回答
0
投票

使用聚合

FILTER
子句。参见:

SELECT rm.professional_id
     , concat_ws(' ', u.first_name, u.last_name) AS professional_full_name
     , rm.unread_count
FROM  (
   SELECT professional_id
        , count(*) FILTER (WHERE read_at IS NULL) AS unread_count
   FROM   request_messages
   WHERE  request_id = $1 
   GROUP  BY professional_id
   ) rm
LEFT   JOIN users u ON rm.professional_id = u.id;

此外,通常最好先聚合,然后再加入:

关于

concat_ws()

© www.soinside.com 2019 - 2024. All rights reserved.