我正在尝试获取最后一个用户与其他用户的所有聊天记录:
这些是我的表格:
名为“user_data”的表
---------------------------
| id | owner | name |
---------------------------
| 1 | 120 | "Nicolas" |
| 2 | 140 | "Angel" |
| 3 | 200 | "Isaac" |
---------------------------
名为“private_messages”的表
------------------------------------------------------------------------
| id | ownerID | toUserID | chatID | message | date |
------------------------------------------------------------------------
| 1 | 120 | 140 | 10 | "Hi" | 1489777023 |
| 2 | 120 | 140 | 10 | "How are you?" | 1489777024 |
| 3 | 120 | 140 | 10 | "I miss u" | 1489777025 |
| 4 | 140 | 120 | 10 | "Viewed." | 1489777123 |
| 5 | 200 | 120 | 20 | "Hey! What happen?" | 1489777111 |
| 6 | 200 | 120 | 20 | "We were friends." | 1489777300 |
------------------------------------------------------------------------
我想获取当前登录用户每次聊天的最后一条消息。所以,我做了下一个:首先我得到所有聊天,其中我的 ID 与“ownerID”和“toUserID”相同,然后我将这些数据与“chatID”分组。
我的查询:
SELECT
_d.chatID,
ANY_VALUE( _d.name) AS name,
ANY_VALUE( _d.message) AS message,
ANY_VALUE( _d.date) AS date
FROM (
SELECT
user_data.name,
private_messages.message,
private_messages.date,
private_messages.chatID
FROM private_messages
INNER JOIN user_data ON private_messages.owner = user_data.owner
WHERE private_messages.owner = "120"
OR private_messages.touser = "120"
ORDER BY private_messages.date DESC) AS _d
GROUP BY _d.chatID
问题是这显示了第一条消息而不是最后一条消息,例如,此查询为我提供了下一条数据:
---------------------------------------------------
| name | message | date |
---------------------------------------------------
| "Nicolas" | "Hi" | 1489777023 | <-- First message
| "Isaac" | "Hey! What happen?" | 1489777111 | <-- First message
---------------------------------------------------
我想要这样的结果:
------------------------------------------------
| name | message | date |
------------------------------------------------
| "Angel" | "Viewed." | 1489777123 | <-- Last message
| "Isaac" | "We were friends." | 1489777300 | <-- Last message
------------------------------------------------
最佳答案
如果 private_messages.id
是一个 AUTO_INCREMENT PRIMARY KEY
你可以使用这个:
select m.chatID, ud.name, pm.message, pm.date
from (
select max(id) as id
from private_messages
where 120 in (ownerID, touserID)
group by chatID
) sub
join private_messages pm on pm.id = sub.id
join user_data ud on ud.owner = pm.owner
关于mysql - 关于 ORDER BY - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864435/