我有notifications
表格的以下表格结构。
id user_id post_id type status date seconduser_id
1 1 23 1 0 somedate 4
2 2 25 2 0 somedate 3
3 3 26 1 0 somedate 4
4 4 28 2 1 somedate 5
5 5 21 2 0 somedate 4
---
---
and so on
此处type = 1
表示like
,type = 2
表示comment
。 status = 0
表示seconduser_id
尚未看到通知。 seconduser_id
是通知收件人。
是否可以获得1个用户的通知(例如seconduser_id = 4
),通知按type
分组,每个count
显示user_id
和最新type
(在一个查询中)?
这样做的实现类似于 User3和其他10个人喜欢你的帖子。
编辑:到目前为止,我有一些内容可以提取user 4
的所有通知,然后是php中的组。我不认为这是有效的,所以我正在寻找更好的解决方案。
答案 0 :(得分:1)
基本答案是聚合查询。复杂的是获取每种类型的最新用户ID。这是一种方法,使用substirng_index()
/ group_concat()
:
select type, count(*),
substring_index(group_concat(user_id order by id desc), ',', 1) as latest_user
from notifications n
where secondaryuser_id = 4 and status = 0
group by type;
我不确定您是否也希望按status
进行过滤。
编辑(由OP添加):
使用上述代码并按post_id
和type
进行分组。因为你想说 User1和其他10个人喜欢你的帖子 。对于每个分组通知,这意味着post_id
必须是唯一的。
SELECT *, substring_index(group_concat(user_id order by id desc), ',', 1) as latest_user, COUNT(post_id) AS total
FROM notifications n
WHERE seconduser_id = 4 and status = 0
GROUP BY post_id, type
答案 1 :(得分:0)
试试这个:
SELECT MAX(user_id) AS LatestUser, type, COUNT(type) AS total
FROM notifications
WHERE seconduser_id = 4
GROUP BY type