Jika Anda mengelompokkan menurut satu (atau lebih) kolom, Anda harus melakukan sesuatu pada semua kolom yang tidak dikelompokkan agar kueri Anda masuk akal.
Anda harus mengatakan apa yang ingin Anda lakukan dengan semua nilai yang dikelompokkan. Biasanya sesuatu seperti SUM(), AVG(), MIN(), MAX(), GROUP_CONCAT()
Jika Anda mengelompokkan berdasarkan m_from, maka Anda tidak akan dapat mengurutkan berdasarkan m_time, karena semua catatan untuk m_from akan dikelompokkan bersama, dan untuk nilai yang tidak dikelompokkan, Anda akan mendapatkan jawaban yang berubah-ubah, karena Anda tidak tentukan apa yang harus dilakukan dengan grup.
Anda mungkin ingin menggunakan fungsi agregat, seperti MAX(m_time) untuk mendapatkan nilai tertinggi untuk m_time, lalu mengurutkannya.
Saya akan menyarankan sesuatu seperti.
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;