Tak jak mówi @James, uporządkuje wszystkie rekordy, a następnie zdobędzie pierwsze 20 wierszy.
Ponieważ tak jest, masz gwarancję otrzymania 20 pierwszych opublikowanych artykułów, nowsze nie zostaną pokazane.
W sytuacji, polecam, aby dodać desc
do order by publish_date
, jeśli chcesz najnowsze artykuły, a następnie najnowszy artykuł będzie pierwszy.
Jeśli chcesz zachować wynik w kolejności rosnącej i nadal chcesz tylko 10 najnowszych artykułów, możesz poprosić mysql o dwukrotne posortowanie wyniku.
To zapytanie poniżej posortuje wynik malejący i ograniczy wynik do 10 (to jest zapytanie w nawiasie). Nadal będzie sortowany w porządku malejącym i nie jesteśmy z tego zadowoleni, dlatego prosimy mysql o posortowanie go jeszcze raz. Teraz mamy najnowszy wynik w ostatnim wierszu.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Jeśli potrzebujesz wszystkich kolumn, robi się to w następujący sposób:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Używam tej techniki, gdy ręcznie piszę zapytania, aby sprawdzić bazę danych pod kątem różnych rzeczy. Nie korzystałem z niego w środowisku produkcyjnym, ale teraz, kiedy go zaznaczam, dodatkowe sortowanie nie wpływa na wydajność.
publish_date
s są równe, ich uporządkowanie nie daje określonych wyników, co oznacza, że jeśli użyjeszLIMIT
paginacji, możesz dostać te same elementy na różnych stronach!