2010-12-01 14 views
1

Ich möchte die beste Möglichkeit zum Implementieren von Paging in Abfragen kennen.Die beste Methode zum Implementieren von Paging in Abfragen

Derzeit bin ich so etwas wie dies zu tun:

SELECT 
    columns 
FROM 
    (SELECT columns FROM table ORDER BY column) 
WHERE 
    rownum BETWEEN start AND end 

Ist dies der beste Weg, um darüber zu gehen?

+0

welcher Geschmack von Datenbank verwenden Sie? – DampeS8N

+0

mysql (Gosh! Warum müssen Antworten 15 Zeichen lang sein!;) –

Antwort

0

Ja, das ist der beste Weg, den ich kenne. Wenn Sie mit SQL Server arbeiten, können Sie Row_Number und CTE zusammen kombinieren. Werfen Sie einen Blick auf http://www.sqlteam.com/article/server-side-paging-using-sql-server-2005

und für MySQL

SELECT MyField 
FROM sometable 
LIMIT [offset], [pagesize] 

natürlich sollten Sie ersetzen [offset] und Seitengröße mit den entsprechenden Werten.

+0

Woher wissen Sie, dass das OP SQL Server verwendet? – Juliet

+0

Gut juliet, es ist ein sechster Sinn :) er erwähnte rownum, und nicht viele DBMS bietet eine Funktion, um eine Zeilennummer zu bekommen :) – Davita

+0

Hmm ... Ich verstehe. BTW, verwende mysql. Nicht sicher, ob Zeilennummer oder andere Funktionen vorhanden sind. –

1

In SQL Server würde ich folgende verwenden:

SELECT DISTINCT * 
FROM (SELECT TOP (@lim) ROW_NUMBER() OVER (ORDER BY sometable.id ASC) AS row, 
                     sometable.id AS id, 
                     sometable.name as name 
        FROM sometable) as tratable 
WHERE Row > @start AND Row <= @lim 
+0

Warum 'TOP (@lim)' * und * 'AND Zeile <= @ lim? Fehle ich etwas? Auch warum "DISTINCT"? –

+0

@Kirk Woll: In diesem Fall können Sie das Feld 'row' verwenden, um die Zeilen im Paging zu identifizieren. – Bamieater

+0

Bin mit mysql. Selbst wenn es SQL-Server ist, bin ich mir nicht sicher, ob das schneller ist. Es ist das gleiche, das ich in meiner Abfrage erwähnt habe. Recht? Oder vermisse ich etwas ....? –

Verwandte Themen