2009-09-30 7 views
1

J'ai une requête qui renvoie 30 lignes. J'écris du code qui paginera ces 30 lignes en 5 enregistrements par page via un appel AJAX.Sélection de lignes entre x et y à partir de la base de données

  1. Y a-t-il une raison de retourner uniquement ces 5 enregistrements dans la couche de présentation? Est-ce qu'il y aurait des avantages en termes de vitesse ou est-ce que les lignes sont sous le capot?

  2. Si oui, comment puis-je réellement le faire dans Sybase? Je sais qu'Oracle a Rownum et MS Sql a quelque chose de similaire, mais je n'arrive pas à trouver une fonction similaire dans Sybase.

Répondre

3

À moins que votre longueur d'enregistrement ne soit énorme, la différence entre 5 et 30 lignes devrait être totalement imperceptible pour l'utilisateur. En fait, il existe un potentiel significatif que les appels DB multiples nuiront aux performances plus que de l'aide. Il suffit de renvoyer toutes les 30 lignes soit à votre niveau intermédiaire ou votre présentation, tout ce qui a plus de sens.

0

Je ne l'ai jamais travaillé avec Sybase, mais voici un lien qui explique comment faire quelque chose de similaire:

http://www.dbforums.com/sybase/1616373-sybases-rownum-function.html

Puisque la solution implique une table temporaire, vous pouvez également l'utiliser pour la pagination. Dans votre requête initiale, placez les 30 lignes dans une table temporaire et ajoutez une colonne pour le numéro de page (les cinq premières lignes seront la page 1, les cinq suivantes la page 2 et ainsi de suite). Sur les demandes de page suivantes, vous interrogez la table temporaire par numéro de page. Cependant, vous ne savez pas exactement comment vous allez nettoyer la table de temp. Peut-être lorsque la session de l'utilisateur expire?

Pour 30 enregistrements, cela ne vaut probablement même pas la peine d'être dérangé par la pagination.

0

Je pense que dans sybase vous pouvez utiliser

select top 5 * from table 
where order-by-field > (last record of previous calls order-by-field) 
order by order-by-field 

assurez-vous juste que vous utilisez le même ordre chaque fois.

Quant au bénéfice, je suppose que cela dépend du nombre de lignes que nous parlons et la taille de la table, etc.

0

Je suis entièrement d'accord avec jmgant, cependant, si vous voulez le faire de toute façon, le processus va quelque chose comme ceci:

  1. Sélectionner 10 premiers articles et stocker dans X
  2. Select top 5 objets et stocker dans Y
  3. XY

Tout ce processus peut se produire dans 1 instruction SQL.