2016-04-26 6 views
1

Ich habe eine Tabelle, die Spalten ID, NAME, PREIS und DATE besteht.MySQL ORDER BY + LIMIT + OFFSET-Anweisungen: wie zuerst OFFSET und dann sortieren mit ORDER BY

Ich versuche eine Navigation im Pager-Stil zu schreiben, weil es viele Einträge in der Tabelle gibt, also war es unangenehm, die gesamte SELECT-Ausgabe anzusehen.

Ich habe folgende Anfrage geschrieben:

SELECT id 
     , name 
     , price 
     , date 
    FROM mytable 
ORDER 
    BY name asc 
LIMIT 30 OFFSET _here's_my_offset_depending_on_the_current_position_ 

Dies ist nur, wie im Beispiel funktioniert gut. Wenn ich versuche, es zu sortieren, sagen wir, nach Preis, scheint es, dass MYSQL zuerst die ganze Tabelle mit ORDER BY sortiert und erst nachdem es einen Offset gemacht hat.

Wie ändere ich dieses Verhalten, mit anderen Worten, wie mache ich einen Offset und nur dann sortiere ich die resultierenden Zeilen nach dem, was ich mag?

+5

eine Unterabfrage verwenden. –

+1

Sortieren Sie auf der Präsentation, nicht in SQL, wenn Sie nur das Subresult sortieren möchten. Natürlich paginiert der Pager immer noch nach der Reihenfolge der Namen, was das Ergebnis etwas merkwürdig erscheinen lässt. – thst

+1

Können Sie erklären, warum Sie das tun wollen? Wenn Sie eine Seitenumbruch machen möchten, ist Ihre Abfrage in Ordnung, wenn Sie tun, was Sie tun möchten (und Sie müssen eine Unterabfrage verwenden), werden Ihre Ergebnisse über Ihre verschiedenen Seiten sehr inkonsistent sein .... –

Antwort

2

Es ist kann einfach sein, wenn Sie Unterabfrage verwenden:

SELECT * FROM (
    SELECT id, name, price, date FROM mytable LIMIT 30 OFFSET _offset_ 
) AS page ORDER BY page.name asc