将多个通知合并为一个

3
我将重新创建我的通知系统,使其能够将多个通知合并为一个。它不会像现在一样显示9行,而是可以显示“有9人回答了你的问题”。

我当前的通知表格如下:

notification_id (PK) | recipient_id | sender_id | type | foreign_id | date | viewed

收件人ID是接收通知的人,发送者ID是通知的来源。类型是通知的种类,所以我知道它应该说“xx已回答”或“xx喜欢你的帖子”。Foreign_id可能是问题的ID。
创建此“合并”系统的最佳方法是什么?当有新答案时,我是否应更新通知并说另一个人也回答了,或者查询可能会计算相同foreign_id的数量?你觉得呢?
1个回答

3
尝试这样做:
SELECT foreign_id, SUM(IF (TYPE= 'like', 1, 0)) likecnt, 
       SUM(IF(TYPE = 'answer', 1, 0)) anscnt 
FROM notification 
GROUP BY foreign_id

编辑:请检查以下内容

SELECT n.foreign_id, n.sender_id
FROM notifications n 
INNER JOIN (SELECT foreign_id, MAX(DATE) DATE 
            FROM notifications 
            GROUP BY foreign_id, user_id
           )  a ON n.foreign_id = a.foreign_id AND n.date = a.date

太棒了!SELECT foreign_id, sender_id FROM notifications GROUP BY foreign_id, user_id这将许多行组合成一行,但是在分组时如何获取最新的行呢?我想要每个分组中最新的sender_id,因此我希望从notification_id最高的行中获取sender_id。(希望你能理解。) - lawls
@lawls,请检查我的更新答案,找到你上一个查询的解决方案。 - Saharsh Shah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接