Як говорить @James, він упорядкує всі записи, а потім отримає перші 20 рядків.
Оскільки це так, ви гарантовано отримаєте 20 перших опублікованих статей, новіші не відображатимуться.
У вашій ситуації я рекомендую додати desc
до order by publish_date
, якщо ви хочете , то найновіші статті, то новітня стаття буде першою.
Якщо вам потрібно зберегти результат у порядку зростання, і все ще хочете лише 10 найновіших статей, ви можете попросити mysql сортувати результат у два рази.
Цей запит нижче буде сортувати результат за спаданням і обмежує результат до 10 (тобто запит всередині дужок). Він все ще буде відсортований у порядку зменшення, і нас це не влаштовує, тому ми просимо mysql сортувати його ще раз. Тепер у нас є останній результат в останньому ряду.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Якщо вам потрібні всі стовпці, це робиться так:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Я використовую цю техніку, коли вручну пишуть запити, щоб вивчити базу даних на різні речі. Я не використовував його у виробничому середовищі, але тепер, коли я його відзначив, додаткове сортування не впливає на продуктивність.
publish_date
s рівні, упорядкування ними не дає визначених результатів, це означає, що якщо ви використовуєтеLIMIT
для пагинації, ви можете отримати однакові елементи на різних сторінках!