[英]Select distinct from the table and sort by date
我正在嘗試構建消息傳遞系統,我想從表中選擇不同的值並按日期排序,還返回已讀和未讀狀態。 我的表結構為id, from_user_id, to_user_id, message, datetime, read
。 假設偽數據如下:
id | from_user_id | to_user_id | message | datetime | read
1 | 20 | 50 | hi | 2016-3-13 06:05:30 | 1
2 | 20 | 50 | hey | 2016-3-13 06:15:30 | 0
3 | 30 | 50 | hi | 2016-3-14 06:05:30 | 0
現在,我想選擇不同的from_user_id
並按日期排序,以便我可以在列表頂部顯示最近from_user_id
的用戶的名稱,並返回讀取狀態1(如果任何from_user_id
的行的讀取狀態為0,那么我想將read
返回為0,以便區分誰的用戶消息為unread消息。
假設from_user_id
在from_user_id
中的read
狀態為0,那么我想在返回from_user_id
不同值時將read
狀態返回為0。 我該怎么做。 我嘗試了以下方法,但在我的情況下不起作用。 它返回不同的值,但不按日期排序,並且在不返回我期望的狀態時讀取狀態。
select distinct(`from_user_id`),register.name FROM message INNER JOIN register ON register.id = message.from_user_id where message.to_user_id = $user_id GROUP BY message.id ORDER BY MAX(datetime) ASC
請嘗試以下查詢:
SELECT
message.from_user_id,
register.name,
message.read
FROM message
INNER JOIN
(
SELECT
from_user_id,
MAX(datetime) max_datetime
FROM message
WHERE to_user_id = 50
GROUP BY from_user_id ) t
ON t.from_user_id = message.from_user_id AND t.max_datetime = message.datetime
INNER JOIN register ON register.id = message.from_user_id
WHERE message.to_user_id = 50
ORDER BY message.datetime ASC
輸入樣例:
id | from_user_id | to_user_id | message | datetime | read
1 | 20 | 50 | hi | 2016-3-13 06:05:30 | 1
2 | 20 | 50 | hey | 2016-3-13 06:15:30 | 0
3 | 30 | 50 | hi | 2016-3-14 06:05:30 | 0
輸出:
from_user_id name read
20 User20 0
30 User30 0
注意:如果message
表中存在多個具有相同datetime
和相同to_user_id
條目,則此查詢可能為您提供同一from_user_id
多行。
簽出此查詢:
SELECT DISTINCT(form_user_id),MIN(read)from table_name ORDER BY datetime ASC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.