2017-05-16 120 views
0

2表:提高SQL查询关于MySQL运行

  • 消息:{ID/thread_id单}
  • 收件人:{ID/thread_id单/ last_message_seen_id}

我想要检索收件人的ID有未读消息:“我计算从最后一条消息看到多少条消息”

这里的查询(有效,但我确信有更多的逻辑/简单):

SELECT r.id, (
    SELECT COUNT(*) 
    FROM message m 
    WHERE m.thread_id = r.thread_id AND m.id > r.last_seen_message_id 
) AS messages 
FROM recipient r 
WHERE (
    SELECT COUNT(*) 
    FROM message m 
    WHERE m.thread_id = r.thread_id AND m.id > r.last_seen_message_id 
) > 0 

我觉得模型很简单,如果你需要更多的细节问。

回答

1

这应该工作:

SELECT r.id, Count(m.id) as messages 
FROM recipient r 
    JOIN messages m on m.thread_id = r.thread_id 
     AND m.id > r.last_seen_message_id 
GROUP BY r.id 
+1

何,我必须学习不同的JOIN ^^感谢您 –

+0

我怎样才能获得其他领域比r.id(r.title,r.etc ...) –

+0

将它们添加到Select和组中(它们必须都在两者中以便计数工作) –