1つ(または複数)の列でグループ化する場合、クエリを理解するには、グループ化されていないすべての列に対して何かを行う必要があります。
グループ化されたすべての値で何をしたいのかを言わなければなりません。通常、SUM()、AVG()、MIN()、MAX()、GROUP_CONCAT()
のようなものm_fromでグループ化する場合、m_fromのすべてのレコードがグループ化されるため、m_timeで並べ替えることはできません。グループ化されていない値については、グループ化されていないため、任意の回答が得られます。グループをどうするかを指定します。
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;