在MySql中按类型对通知进行分组

时间:2014-01-15 11:47:04

标签: mysql

我有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表示liketype = 2表示commentstatus = 0表示seconduser_id尚未看到通知。 seconduser_id是通知收件人。

是否可以获得1个用户的通知(例如seconduser_id = 4),通知按type分组,每个count显示user_id和最新type在一个查询中)?

这样做的实现类似于 User3和其他10个人喜欢你的帖子。

编辑:到目前为止,我有一些内容可以提取user 4的所有通知,然后是php中的组。我不认为这是有效的,所以我正在寻找更好的解决方案。

2 个答案:

答案 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_idtype进行分组。因为你想说 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