【问题标题】:Mysql join with group by and order byMysql加入group by和order by
【发布时间】:2014-03-26 06:36:29
【问题描述】:

我正在使用这个 mysql 查询

SELECT `p`.`id` AS product_id, `p`.`title` , `i`.`image` , `u`.`user_username` , `m`.`id` AS message_id, `m`.`date` , `m`.`from` , `m`.`to` , `m`.`message` , `m`.`read`
FROM (`messages` AS m)
JOIN `products` AS p ON `m`.`product_id` = `p`.`id`
JOIN `users` AS u ON `m`.`from` = `u`.`user_id`
JOIN `product_images` AS i ON `p`.`id` = `i`.`product_id`
WHERE `i`.`type` = 'FRONT'
AND (m.to = '1171' OR m.from = '1171)
GROUP BY `m`.`therad_user` , `m`.`product_id`
ORDER BY `m`.`id` DESC

在消息表中,它显示具有最旧消息 id 的消息,我想返回最新消息。但它显示最旧的消息。我如何解决这个问题。

【问题讨论】:

  • 每组最大的 n 没有帮助?
  • 是的,我搜索它有子查询解决方案,但子查询解决方案是针对不同的表而不是主表
  • 所以,现在只关注“不同”表。
  • 我使用另一个查询来解决这个问题,以获取最后一条消息表单线程并从数组中的第一条消息替换
  • 是的,但我不会停止思考这个问题。

标签: php mysql sql join greatest-n-per-group


【解决方案1】:

先尝试 ORDER BY,然后再尝试 GROUP BY

SELECT * FROM
(
SELECT `p`.`id` AS product_id, `p`.`title` , `i`.`image` , `u`.`user_username` , `m`.`id` AS message_id, `m`.`date` , `m`.`from` , `m`.`to` , `m`.`message` , `m`.`read`
FROM (`messages` AS m)
JOIN `products` AS p ON `m`.`product_id` = `p`.`id`
JOIN `users` AS u ON `m`.`from` = `u`.`user_id`
JOIN `product_images` AS i ON `p`.`id` = `i`.`product_id`
WHERE `i`.`type` = 'FRONT'
AND (m.to = '1171' OR m.from = '1171)
ORDER BY `m`.`id` DESC
) tmp
GROUP BY `m`.`therad_user` , `m`.`product_id`

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多