To ting at forstå:
-
Generelt set er resultatsæt uordnet medmindre du angiver en
ORDER BY
klausul; i det omfang du angiver en ikke-streng rækkefølge (dvs.ORDER BY
over ikke-unikke kolonner), er rækkefølgen, som poster, der er ens under den rækkefølge, vises i resultatsættet, udefineret.Jeg formoder, at du muligvis angiver en sådan ikke-streng ordre, som er roden til dine problemer:Sørg for, at din ordre er streng ved at angive
ORDER BY
over et sæt kolonner, der er tilstrækkeligt til entydigt at identificere hver post, som du interesserer dig for dens endelige placering i resultatsættet. -
DISTINCT
kan brugeGROUP BY
, som får resultaterne til at blive sorteret efter de grupperede kolonner; dvs.SELECT DISTINCT a, b, c FROM t
vil producere et resultatsæt, der ser ud som omORDER BY a, b, c
er blevet anvendt. Igen, at angive en tilstrækkelig streng rækkefølge til at opfylde dine behov vil tilsidesætte denne effekt.
Efter din opdatering, i betragtning af mit punkt #2 ovenfor, er det klart, at effekten af at gruppere resultaterne for at opnå DISTINCT
gør det umuligt derefter at bestille efter den ikke-grupperede kolonne p.id
; i stedet ønsker du:
SELECT t.*
FROM Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC