我有一个存储 userID、isRead、type、message 的通知表
UserID 是用户的id。 isRead 存储 1/0 用于已读/未读。 类型存储通知的类型,“提及/关注/回复”。 消息是用户将看到的消息。
我需要一个分组查询,它可以返回不同的“类型”和该类型的未读消息数,但仅限于 1 条记录。
如何更改下面的查询以获得如下结果集:
请注意,该类型的未读消息数量可能更多,但我希望查询在找到第一条记录后立即停止计数。然后它开始寻找其他类型。
运行 3 个单独的查询,每个 TYPE 一个,会更快吗?
select type from table where userID=123 and isRead=0 group by type
0=array(
'type'=> mention,
'count'=> 1
)
1=array(
'type'=> reply,
'count'=> 1
)
and so on
这样的事情可能会有所帮助
SELECT type FROM (
SELECT type FROM table WHERE type = 'mention' AND userID = 123 AND isRead = 0 LIMIT 1
UNION
SELECT type FROM table WHERE type = 'follow' AND userID = 123 AND isRead = 0 LIMIT 1
UNION
SELECT type FROM table WHERE type = 'reply' AND userID = 123 AND isRead = 0 LIMIT 1
) AS X
大概,你想要这样的东西:
select type
from mytable
where userID = 123
group by type
having min(isRead) = 0
查询过滤给定用户,按类型分组,并只选择至少有一行未读的组。
对于性能,以下索引可能有帮助:
mytable(userID, type, isRead)