我的查询在下面
SELECT *
FROM
(
SELECT
usr.*,
messages.message_text, messages.message_id
FROM
`user` as usr
LEFT JOIN
(
SELECT
message.*
FROM
message AS message
ORDER BY
message.updated_at
DESC
) AS messages
ON
`usr`.`user_id` = `messages`.`sender_id` OR `usr`.`user_id` = `messages`.`receiver_id`
WHERE
`usr`.`is_delete` = 0 AND `usr`.`is_active` = 1
ORDER BY
messages.updated_at
DESC
) AS result
GROUP BY
result.user_id
如果我删除分组的话效果很好,但是我希望通过分组获得结果,请帮助。
我有一个消息表,因为我已经保存了发送者ID和接收者ID,两个ID都具有与用户表的外键,我希望按用户和用户详细信息发送最近的消息 因此,对于最新消息,我正在使用desc排序,并且在获得所有消息后按降序排序,我正在使用group by,但是它不起作用。
答案 0 :(得分:-1)
制作表模式和数据插入其中非常困难,就像您的情况一样。因此,下次,请提供指向您的架构/情况的小提琴链接。
这是您查询中的问题:
LEFT JOIN
之后您不需要子查询ORDER BY
子句始终位于GROUP BY
之后SELECT
子句中提及GROUP BY
所要包含的所有列。对查询进行了一些调整:
SELECT *
FROM
(
SELECT
usr.*,
messages.message_text, messages.message_id, messages.updated_at
FROM
user as usr
LEFT JOIN message messages
--(
-- SELECT
-- message.*
-- FROM
-- message AS message
-- ORDER BY
-- message.updated_at
-- DESC
--) AS messages
ON
usr.user_id = messages.sender_id OR usr.user_id = messages.receiver_id
WHERE
usr.is_delete = 0 AND usr.is_active = 1
--ORDER BY
--messages.updated_at
--DESC
) AS result
GROUP BY
result.user_id,result.name,result.is_delete,result.is_active,result.message_text,result.message_id,updated_at
ORDER BY
result.updated_at
DESC
希望它会有所帮助:)