Tout comme @James le dit, il ordonnera tous les enregistrements, puis obtiendra les 20 premières lignes.
Dans l'état actuel des choses, vous êtes assuré d'obtenir les 20 premiers articles publiés, les plus récents ne seront pas affichés.
Dans votre situation, je vous recommande d' ajouter desc
à order by publish_date
, si vous voulez que les articles les plus récents, le plus récent article sera le premier.
Si vous avez besoin de conserver le résultat dans l'ordre croissant et que vous ne voulez toujours que les 10 derniers articles, vous pouvez demander à mysql de trier votre résultat deux fois.
Cette requête ci-dessous triera le résultat par ordre décroissant et limitera le résultat à 10 (c'est-à-dire la requête entre parenthèses). Il sera toujours trié par ordre décroissant, et nous ne sommes pas satisfaits de cela, nous demandons donc à mysql de le trier une fois de plus. Nous avons maintenant le résultat le plus récent sur la dernière ligne.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Si vous avez besoin de toutes les colonnes, cela se fait de cette façon:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
J'utilise cette technique lorsque j'écris manuellement des requêtes pour examiner la base de données pour diverses choses. Je ne l'ai pas utilisé dans un environnement de production, mais maintenant quand je l'ai marqué, le tri supplémentaire n'a pas d'impact sur les performances.
publish_date
s sont égaux, la commande par eux ne donne pas de résultats déterminés, ce qui signifie que si vous utilisezLIMIT
pour la pagination, vous pouvez finir par obtenir les mêmes éléments sur différentes pages!