依序排序和按组排序都无法正常工作

时间:2019-02-27 07:03:27

标签: mysql group-by subquery sql-order-by

我的查询在下面

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,但是它不起作用。

1 个答案:

答案 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

希望它会有所帮助:)