2009-05-26 4 views
0

Je voudrais rassembler les "dernières techniques" pour paginer les résultats pour n'importe quelle base de données dans ce wiki.Résultats de la page dans [base de données de votre choix]

Entrée: J'ai une grande table PAGE_ME:

create table PAGE_ME (
    ID bigint not null, 
    NAME varchar(32) not null, 
    CREATED TIMESTAMP not null 
) 

id est pas nécessairement dans le même ordre que created. Je veux afficher les résultats entre 5. May 2008 09:03:01 et 3. Aug 2008 11:00:01, 20 à la fois, classés par date, croissant (5 mai d'abord). La requête doit retourner NAME et CREATED (plus tout ce que vous devez paginer le résultat), de sorte que la requête est intérieure:

select NAME, CREATED 
from PAGE_ME 
where CREATED between '2008-05-05 09:03:01' and '2008-08-03 11:00:01' 
order by CREATED asc 

Sur les claviers, prêts ... Go! ;)

Répondre

1

Lire les requêtes d'appel de mon article here et pour sql server here. Toutes les requêtes sont destinées à fonctionner sur n'importe quelle requête que vous leur lancez, donc pas de trucs qui ne fonctionnent que dans certaines situations.

1

Dans Oracle une solution commune est:

select NAME, CREATED 
from 
(select NAME, CREATED, ROWNUM rn 
    from 
    (select NAME, CREATED 
    from PAGE_ME 
    where CREATED between '2008-05-05 09:03:01' and '2008-08-03 11:00:01' 
    order by CREATED asc 
) 
    where ROWNUM <= :max_row 
) 
where rn >= :min_row 

Ici,: min_row et: max_row définir les limites de la page en cours, par exemple 1 et 10, 11 et 20, ...

+0

Je l'utilise tout le temps. Il existe une fonctionnalité similaire dans les versions plus récentes de MSSQL. Vous pouvez donc utiliser la même construction (avec des modifications mineures) dans MSSQL. –

+0

Oh oui et vous n'avez pas besoin de la sous-requête au milieu, puisque vous avez la clause order by dans la sous-requête la plus interne, vous pouvez juste avoir le truc "ROWNUM <= x" au plus profond et se débarrasser du milieu . –

+1

Vous voulez dire que vous n'en avez pas besoin dans MSSQL? Vous en avez besoin dans Oracle sinon vous n'obtiendrez pas les données correctes. –

Questions connexes