我正在实施通知系统。我的表结构有点像这个..逐列逐行获得列值最大的行
ID(自动递增主键)
USER_ID(谁通知应显示的用户的用户ID,INT)
triggered_by(用户谁触发通知,INT)
POST_ID(交的量,通知存在,INT)
类型(该通知的类型,INT)
看出(已经通知被读取,布尔)
当我将通知标记为可见时,我使用了post_id和type,这意味着我们可以安全地假设,如果查看了具有最大id的行,则会查看该post_id和type的所有先前行。
现在,我想为该post_id和type获取与之前条目相结合的行,以及为该post_id和type注册的行数。我当前的查询是
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”的最外层查询的WHERE子句将返回任何随机行的“看到”的列,其中,因为我想它返回的其他数据则来自计数具有最大ID的行。
请首先检查您的查询,您的查询不正确。你最后得到了这个组,但是最上面的选择列表有许多不在列表中的列,你确定这个查询可以运行吗? – ljh 2013-03-20 18:56:22
是这个查询运行良好。 – Sourabh 2013-03-21 03:09:15