我正在实施通知系统。我的表结构有点像这样..
id(自动递增主键)
user_id(应显示通知的用户的用户 ID ,int)trigger_by(
触发通知的用户,int)
post_id(存在通知的帖子,int)
type(通知的类型, int)
seen (通知是否被读取, bool)
当我将通知标记为已看到时,我使用的是 post_id 和 type,这意味着我们可以安全地假设,如果看到具有最大 id 的行,则该 post_id 和 type 的所有先前行都会被看到。
现在,我想获取与该 post_id 和类型的先前条目相结合的行,以及为该 post_id 和类型注册的行数。我目前的查询是
select max(x.id) as id,
x.post_id as post_id,
x.seen as seen,
x.user_id as user_id,
x.triggered_by as triggered_by,
x.type as type,
x.count as count
from (SELECT notification.id,
notification.post_id,
notification.user_id,
notification.triggered_by,
notification.type,
c.count, notification.seen
FROM `notification`
join (select post_id, type, count(id) as count
from notification group by post_id, type) c
on c.type=notification.type
and c.post_id=notification.post_id
Where notification.user_id=1) x
Group by post_id
Order by id desc limit 10
这个查询的问题是,最外层查询的“group by”子句返回任何随机行的“seen”列,因为我希望它返回数据,然后从具有最大 id 的行开始计数。