[英]Sub-query to count unread messages in MySQL
我有一個表messages
具有以下外觀
+------------+-----------+---------+---------+------+
| message_id | sent_from | sent_to | message | seen |
+------------+-----------+---------+---------+------+
| | | | | |
+------------+-----------+---------+---------+------+
message_id
是主鍵
sent_from
和send_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.