Dua hal yang perlu dipahami:
-
Secara umum, kumpulan hasil tidak berurutan kecuali jika Anda menentukan
ORDER BY
ayat; sejauh Anda menentukan pesanan tidak ketat (yaituORDER BY
di atas kolom non-unik), urutan di mana catatan yang sama di bawah urutan itu muncul dalam hasil yang tidak ditentukan.Saya menduga Anda mungkin menentukan urutan yang tidak ketat, yang merupakan akar masalah Anda:pastikan bahwa pemesanan Anda ketat dengan menentukan
ORDER BY
lebih dari satu set kolom yang cukup untuk secara unik mengidentifikasi setiap catatan yang Anda pedulikan dengan posisi akhirnya di kumpulan hasil. -
DISTINCT
boleh menggunakanGROUP BY
, yang menyebabkan hasil diurutkan berdasarkan kolom yang dikelompokkan; yaitu,SELECT DISTINCT a, b, c FROM t
akan menghasilkan hasil yang muncul seolah-olahORDER BY a, b, c
telah diterapkan. Sekali lagi, menentukan urutan yang cukup ketat untuk memenuhi kebutuhan Anda akan mengesampingkan efek ini.
Mengikuti pembaruan Anda, mengingat poin saya #2 di atas, jelas bahwa efek pengelompokan hasil untuk mencapai DISTINCT
membuat tidak mungkin untuk kemudian memesan dengan kolom yang tidak dikelompokkan p.id
; sebagai gantinya, Anda ingin:
SELECT t.*
FROM Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC