Genau wie @James sagt, werden alle Datensätze sortiert und dann die ersten 20 Zeilen abgerufen.
Da dies der Fall ist, erhalten Sie garantiert die 20 zuerst veröffentlichten Artikel, die neueren werden nicht angezeigt.
In Ihrer Situation, empfehle ich Ihnen , fügen Sie desc
zu order by publish_date
, wenn Sie die neuesten Artikel wollen, dann werden die neuesten Artikel zuerst sein.
Wenn Sie das Ergebnis in aufsteigender Reihenfolge halten möchten und dennoch nur die 10 neuesten Artikel möchten, können Sie mysql bitten, Ihr Ergebnis zweimal zu sortieren.
Diese Abfrage unten sortiert das Ergebnis absteigend und begrenzt das Ergebnis auf 10 (das ist die Abfrage in Klammern). Es wird weiterhin in absteigender Reihenfolge sortiert, und wir sind damit nicht zufrieden. Deshalb bitten wir mysql, es noch einmal zu sortieren. Jetzt haben wir das neueste Ergebnis in der letzten Zeile.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Wenn Sie alle Spalten benötigen, geschieht dies folgendermaßen:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Ich verwende diese Technik, wenn ich manuell Abfragen schreibe, um die Datenbank auf verschiedene Dinge zu untersuchen. Ich habe es nicht in einer Produktionsumgebung verwendet, aber jetzt, wenn ich es als Benchmark markiert habe, wirkt sich die zusätzliche Sortierung nicht auf die Leistung aus.
publish_date
s gleich sind, die Reihenfolge nach ihnen keine bestimmten Ergebnisse liefert. Wenn Sie sieLIMIT
für die Paginierung verwenden, erhalten Sie möglicherweise dieselben Elemente auf verschiedenen Seiten!