簡體   English   中英

子查詢以計數MySQL中的未讀消息

[英]Sub-query to count unread messages in MySQL

我有一個表messages具有以下外觀

+------------+-----------+---------+---------+------+
| message_id | sent_from | sent_to | message | seen |
+------------+-----------+---------+---------+------+
|            |           |         |         |      |
+------------+-----------+---------+---------+------+

message_id是主鍵

sent_fromsend_to是具有用戶ID的整數字段

message是文本字段

seen具有“是”或“否”值。

我正在使用此查詢過濾具有user_id 5的用戶的最后一次對話

SELECT a.message_id, a.sent_from, a.sent_to, a.message, a.seen, users.username, users.user_image
FROM messages a
  INNER JOIN 
  (SELECT sent_from, max(message_id) AS maxid from messages GROUP BY sent_from, sent_to) AS b ON
  a.message_id = b.maxid
INNER JOIN users ON users.user_id = a.sent_from
WHERE a.sent_to = 5

上面的查詢選擇了這樣的數據

+------------+-----------+---------+---------+------+----------+------------+
| message_id | sent_from | sent_to | message | seen | username | user_image |
+------------+-----------+---------+---------+------+----------+------------+
| 39         | 3         | 5       | hello   | YES  | ali786   | image1.jpg |
+------------+-----------+---------+---------+------+----------+------------+
| 40         | 2         | 5       | hi      | YES  | john123  | image2.jpg |
+------------+-----------+---------+---------+------+----------+------------+
| 48         | 1         | 5       | hello   | NO   | shahid7  | image3.jpg |
+------------+-----------+---------+---------+------+----------+------------+

我想在上面的查詢中添加一個子查詢,以最后添加一列unread_messages 這將計數從所有消息messages具有表seen狀態的“否”發送由sent_from用戶id和sent to sent_to`用戶標識

您可以在內部子查詢中使用COUNT(CASE WHEN ...)使用條件聚合來獲取未讀消息的計數:

SELECT a.message_id, a.sent_from, a.sent_to, a.message, a.seen, 
       users.username, users.user_image, 
       b.unread_messages 
FROM messages a
  INNER JOIN 
  (SELECT sent_from, 
          max(message_id) AS maxid,
          COUNT(CASE WHEN seen = 'NO' THEN 1 ELSE NULL END) AS unread_messages 
   FROM messages 
   GROUP BY sent_from, sent_to) AS b ON a.message_id = b.maxid
INNER JOIN users ON users.user_id = a.sent_from
WHERE a.sent_to = 5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM