Twee dingen om te begrijpen:
-
Over het algemeen zijn resultatensets ongeordend tenzij u een
ORDER BY. opgeeft clausule; voor zover u een niet-strikte bestelling opgeeft (d.w.z.ORDER BYover niet-unieke kolommen), is de volgorde waarin records die onder die volgorde gelijk zijn in de resultatenset verschijnen, niet gedefinieerd.Ik vermoed dat je een dergelijke niet-strikte volgorde opgeeft, wat de oorzaak is van je problemen:zorg ervoor dat je bestelling strikt is door
ORDER BYop te geven over een reeks kolommen die voldoende is om elk record waarvan u de uiteindelijke positie in de resultatenset belangrijk vindt, op unieke wijze te identificeren. -
DISTINCTmagGROUP BY. gebruiken , waardoor de resultaten worden geordend op de gegroepeerde kolommen; dat wil zeggen,SELECT DISTINCT a, b, c FROM tzal een resultatenset produceren die eruitziet alsofORDER BY a, b, cis aangebracht. Nogmaals, het specificeren van een voldoende strikte volgorde om aan uw behoeften te voldoen, zal dit effect teniet doen.
Na uw update, rekening houdend met mijn punt #2 hierboven, is het duidelijk dat het effect van het groeperen van de resultaten om DISTINCT te bereiken maakt het onmogelijk om vervolgens te bestellen via de niet-gegroepeerde kolom p.id; in plaats daarvan wil je:
SELECT t.*
FROM Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC