我有兩個表,一個用于聊天,另一個用于用戶,我有一些 user_id。我需要使用兩個 id 發送的最后一條訊息對用戶 id 進行排序。
User table:
| ID | 姓名 | 電子郵件 | 密碼 |
|---|---|---|---|
| 6 | xyz | xyz@g | 123 |
| 5 | 美國廣播公司 | abc@g | 123 |
| 7 | pqr | pqr@g | 123 |
| 4 | 明尼蘇達州 | lmn@g | 123 |
Chat table:
| ID | 發件人 | 接收者 | 資訊 | 時間線 |
|---|---|---|---|---|
| 102 | 6 | 5 | 123 | 2021-10-16 03:09:08 |
| 103 | 6 | 7 | 123 | 2021-11-17 05:20:28 |
| 110 | 6 | 5 | 123 | 2021-12-16 06:19:20 |
| 112 | 6 | 4 | 123 | 2021-10-18 11:29:08 |
我需要使用聊天表中的最高 id 對用戶表進行排序。例如這里 112 是最高的聊天 id,它的接收者 id 是 4 我需要對我的用戶表進行排序
4 和 5 有 chat_id 110 然后是 7 有 103
所以用戶表需要看起來像:
| ID | 姓名 | 電子郵件 | 密碼 |
|---|---|---|---|
| 4 | 明尼蘇達州 | lmn@g | 123 |
| 5 | 美國廣播公司 | abc@g | 123 |
| 7 | pqr | pqr@g | 123 |
6 不存在所以不需要添加到結果表中
我不是要更新表格。我的意思是從表中選擇這些值
uj5u.com熱心網友回復:
使用GROUP By和MAX聚合為每個用戶找到適用的聊天 ID。
SELECT a.*
FROM users a
JOIN (
SELECT receiver, MAX(id) AS id
FROM chat
GROUP BY receiver
) c ON a.id = c.receiver
ORDER BY c.id DESC
或者
SELECT a.id, MAX(a.name) AS name, MAX(a.email) AS email, MAX(a.password) AS password
FROM users a
JOIN chat c ON a.id = c.receiver
GROUP BY a.id
ORDER BY MAX(c.id) DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324412.html
下一篇:最有效的日志存盤方式
