我正在构建一个消息传递系统,并且只需要提取每个发件人发送给指定收件人的最后一条消息。因此,如果 3 个人每人向收件人发送了 5 条消息(总共 15 条消息),我需要获得 3 个条目;每个发件人的最后一条消息。
这是我当前的 SQL:
SELECT
messages.*,
user_accounts.uacc_id,
user_accounts.uacc_username,
user_profiles.upro_image_name
FROM messages
LEFT JOIN user_accounts
ON messages.msg_from_uacc_fk = user_accounts.uacc_id
LEFT JOIN user_profiles
ON user_profiles.upro_uacc_fk = user_accounts.uacc_id
WHERE
messages.msg_to_uacc_fk = ?
ORDER BY
msg_id
DESC
我尝试在 SELECT 中添加“MAX(1)”,在 DESC 之后添加“LIMIT = 1”,但是,当然,这总共只返回了 1 条消息。
有时很难猜测表格是如何设计的,但下面的查询使用子查询来获取每个用户的最新消息。
SELECT a.*,
c.uacc_id,
c.uacc_username,
d.upro_image_name
FROM messages a
INNER JOIN
(
SELECT msg_from_uacc_fk, MAX(msg_id) max_id
FROM messages
GROUP BY msg_from_uacc_fk
) b ON a.msg_from_uacc_fk = b.msg_from_uacc_fk AND
a.msg_id = b.max_id
INNER JOIN user_accounts c
ON a.msg_from_uacc_fk = c.uacc_id
INNER JOIN user_profiles d
ON d.upro_uacc_fk = c.uacc_id
WHERE a.msg_to_uacc_fk = ?
如果这不能解决问题,请在您的问题中添加示例记录:)
我是一名优秀的程序员,十分优秀!