簡體   English   中英

從表格中選擇“與眾不同”並按日期排序

[英]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_idfrom_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

更新的SQL字段

輸入樣例:

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.

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