Sybase offset pour la pagination
Est-il un moyen simple de mettre en œuvre la pagination dans sybase?
Dans postgres il y a limit et offset dans mysql, il est à la limite de X,Y. Ce sujet sybase? Il est top clausure pour limiter les résultats, mais pour atteindre la pleine pagination, il est également le décalage nécessaire.
Il n'est pas un problème si il y a un peu de pags, je peux simplement couper les résultats sur le côté client, mais si il y a des millions de lignes, je voudrais récupérer uniquement les données dont j'ai besoin.
Est-ce à propos de Sybase ASE ou Sybase SQL anywhere? SQL Anywhere prend en charge les
TOP .. START WITH ..
OriginalL'auteur kospiotr | 2011-10-13
Vous devez vous connecter pour publier un commentaire.
Citant http://www.isug.com/Sybase_FAQ/ASE/section6.2.html#6.2.12:
Vous pouvez définir un maximum
rowcount
, ce qui limite le nombre de lignes renvoyées par une requête particulière:Cette limite s'applique jusqu'à ce qu'il soit réinitialisé:
Vous pouvez sélectionner dans une table temporaire, puis d'extraire des données à partir de:
Vous pouvez optimiser le stockage sur la table temp en ne stockant que les colonnes ID, qui vous rejoignez ensuite retour à la table d'origine pour votre sélection.
La FAQ propose également d'autres solutions, y compris les curseurs ou Sybperl.
OriginalL'auteur kolchanov
OriginalL'auteur ozkar
Je suis très en retard à la fête, mais je l'ai est arrivé de tomber sur ce problème et trouvé une meilleure réponse à l'aide de HAUT et de COMMENCER À partir de sybase doc. Vous devez utiliser la COMMANDE PAR pour ou vous aurez des résultats imprévisibles.
http://dcx.sybase.com/1101/en/dbusage_en11/first-order-formatting.html
SÉLECTIONNEZ HAUT 2 DÉPART À 5 *
Des Employés
ORDER BY Nom DESC;
OriginalL'auteur Vadim Cote
Malheureusement Sybase ne prévoit pas la possibilité de définir un début et le décalage de la limite. Le meilleur que vous pouvez obtenir est d'utiliser le SET ROWCOUNT pour limiter le nombre d'enregistrements renvoyés. Si vous avez 1000 enregistrements et souhaitez la page de 50 entrées alors quelque chose comme ceci affichera la première page...
Pour la deuxième page...
...et puis vous pouvez choisir de ne pas afficher les 50 premières à partir de votre code Java. Évidemment, comme vous page vous finissez par avoir à revenir de plus en plus grands ensembles de données. Votre question à propos de quoi faire avec 1 000 000 d'enregistrements ne semble pas pratique pour une interface utilisateur qui est paginé. Aucun utilisateur de recherches sur Google et puis les pages de l'avant 1000 fois la recherche de trucs.
Que faire si j'ai une Clé Naturelle?
Si vous avez un relativement grand ensemble de données, et vous pouvez utiliser une clé naturelle sur vos données, cela aidera à limiter le nombre d'enregistrements retournés. Par exemple, si vous avez une liste de contacts et d'avoir une interface qui permet aux utilisateurs de sélectionner Un Z à la page les gens dans le répertoire basé sur le Nom de famille, alors vous pouvez faire quelque chose comme...
Quand il y a plus de 50 personnes avec un nom de famille commençant par "B", vous utilisez la même méthode que ci-dessus à la page d'avant...
... et supprimer les 50 premiers dans du code Java.
Suivantes à partir de cet exemple, peut-être vous pouvez limiter la recherche par date, ou quelque autre morceau de données significatives pour vos utilisateurs requriements.
Espérons que cette aide!
OriginalL'auteur Brad
Vous pouvez essayer d'utiliser le set ROWCOUNT deux fois comme ceci:
Cela crée une table temporaire de lignes à ignorer. Vous devez ajouter votre OÙ et ORER PAR des clauses à la fois le Sélectionne à sauter les pages de droite.
OriginalL'auteur John
Sybase SQL Anywhere exemple, le nombre de lignes par page:10, offset:1000.
Remarque: Vous devez spécifier le
order by
colonne.OriginalL'auteur Hainan.Z