basandome en tu ultima consulta y agregando un nuevo ORDER si funciona.
pero.. deberia estar mas optimizado.. esta ordenando dos veces.
id_usuario_recibe = 1 esta asi porque lo pruebo para que me devuelva todos los mensajes que recibió el usuario con id = 1
Código PHP:
SELECT mensajes.id, mensajes.id_usuario_envia, usuarios.usuario, mensajes.mensaje
FROM mensajes
INNER JOIN usuarios ON usuarios.id = mensajes.id_usuario_envia
WHERE mensajes.id_usuario_recibe = 1
ORDER BY mensajes.id DESC
)T1
GROUP BY id_usuario_envia
ORDER BY id DESC