0

我正在实施通知系统。我的表结构有点像这样..

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 的行开始计数。

4

1 回答 1

0

尝试这个:

 Select id, post_id, seen,
    user_id, triggered_by, type, 
   (Select Count(*) From notification
    Where type = N.Type
      And post_id = n.post_id) Count
 From Notification n
 where user_id = 1
 Order by id desc limit 10

除了“结合该 post_id 和类型的先前条目”是什么意思?您是说希望此查询将源表中不同行的值合并到一行输出中吗?就像从一行中获取 post_id 一样,但从一些不同的较早行中获取 Triggered_By?

于 2013-03-20T19:06:23.720 回答