Als u groepeert op één (of meer) kolommen, moet u iets doen aan alle niet-gegroepeerde kolommen om uw zoekopdracht zinvol te maken.
Je moet zeggen wat je wilt doen met alle gegroepeerde waarden. Meestal zoiets als SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()
Als u groepeert op m_from, kunt u niet sorteren op m_time, omdat alle records voor m_from worden gegroepeerd, en voor de niet-gegroepeerde waarden krijgt u een willekeurig antwoord, omdat u dat niet hebt gedaan specificeren wat te doen met de groep.
U wilt waarschijnlijk een aggregatiefunctie gebruiken, zoals MAX(m_time) om de hoogste waarde voor m_time te krijgen, en daarop sorteren.
Ik zou zoiets voorstellen.
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;