Ако групирате по една (или повече) колони, тогава трябва да направите нещо с всички негрупирани колони, за да има смисъл на вашата заявка.
Трябва да кажете какво искате да се направи с всички групирани стойности. Обикновено нещо като SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()
Ако групирате по m_from, тогава няма да можете да сортирате по m_time, тъй като всички записи за m_from ще бъдат групирани заедно, а за негрупираните стойности ще получите произволен отговор, тъй като не сте го направили посочете какво да правите с групата.
Вероятно искате да използвате агрегатна функция, като MAX(m_time), за да получите най-високата стойност за m_time и след това да сортирате по нея.
Бих препоръчал нещо като.
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;