Самое простое решение - сделать это:
ORDER BY reply.id ASC, medal.id DESC
И удалить ваше заявление GROUP BY
.
Вы можете отфильтровать сообщения / пользователей, у которых впоследствии есть несколько медалей (пропустить строки, содержащие ненужные медали).
Следующий вариант - выбрать MAX(medal.id)
в подзапросе, а затем присоединиться к нему. Это грязно, но выполнимо. Вот общая идея (вам, вероятно, придется переименовать несколько псевдонимов таблиц, поскольку они используются более одного раза):
SELECT *,
medal.url,
medal.name
FROM
(
SELECT reply.id,
reply.message,
reply.userid,
reply.date,
MAX(medal.id) AS medal_id,
user.id,
user.name AS username
FROM posts AS reply
LEFT JOIN users AS user ON reply.userid = user.id
LEFT JOIN medals AS medal ON medal.userid = user.id
GROUP BY reply.id
ORDER BY reply.id ASC
)
AS t
LEFT JOIN medals AS medal ON medal.id = t.medal_id