2017-05-16 82 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和組中(它們必須都在兩者中以便計數工作) –