Wenn Sie nach einer (oder mehreren) Spalte gruppieren, müssen Sie etwas mit allen nicht gruppierten Spalten tun, damit Ihre Abfrage sinnvoll ist.
Sie müssen sagen, was mit allen gruppierten Werten geschehen soll. Normalerweise etwas wie SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()
Wenn Sie nach m_from gruppieren, können Sie nicht nach m_time sortieren, da alle Datensätze für m_from zusammen gruppiert werden und Sie für die nicht gruppierten Werte eine willkürliche Antwort erhalten, da Sie dies nicht getan haben Geben Sie an, was mit der Gruppe geschehen soll.
Wahrscheinlich möchten Sie eine Aggregatfunktion wie MAX(m_time) verwenden, um den höchsten Wert für m_time zu erhalten, und dann danach sortieren.
Ich würde so etwas vorschlagen wie.
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;