Hvis du grupperer efter en (eller flere) kolonner, skal du gøre noget ved alle de ikke-grupperede kolonner, for at din forespørgsel giver mening.
Du skal sige, hvad du vil have gjort med alle de grupperede værdier. Normalt noget som SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()
Hvis du grupperer efter m_from, så vil du ikke være i stand til at sortere efter m_tid, da alle poster for m_from vil blive grupperet sammen, og for de ikke-grupperede værdier vil du få et vilkårligt svar, da du ikke angiv, hvad du skal gøre med gruppen.
Du vil sandsynligvis bruge en aggregeret funktion, såsom MAX(m_time) for at få den højeste værdi for m_time, og derefter sortere på det.
Jeg vil foreslå noget lignende.
SELECT MAX(m_id),m_from, MAX(m_time) as latest FROM messages
WHERE m_to='XXX' OR m_from='XXX'
GROUP BY m_from
ORDER BY latest DESC;