Question

Je souhaite afficher la liste de tous les utilisateurs de mon site, mais uniquement 10 personnes par âge. Je ne sais pas comment faire cela exactement. Je sais comment faire en affichant simplement tous les utilisateurs sur une seule page, mais ce n'est pas très bon, n'est-ce pas?

Si je le fais avec le code que j'ai maintenant, les dix premiers utilisateurs ne seront jamais plus nombreux. Je veux pouvoir obtenir tous les utilisateurs pour une requête unique, le stocker globalement, puis parcourir la liste en récupérant les 10 prochains et ainsi de suite pour l'affichage.

Je développe sous Appengine en utilisant Java et le framework Spring certaines des solutions auxquelles je pensais,

  1. Stocker dans la session et parcourir la liste (très mauvais je suppose)
  2. remettez-le au JSP, plus précisément à l’un des scopes, page, requête, etc. Mais je pense que la requête ne fonctionnera pas.
  3. Recherchez un contrôleur Spring capable de gérer cela.
Était-ce utile?

La solution

En règle générale, vous utiliseriez une variable de formulaire sur votre page (via GET ou POST) appelée "page", qui serait un nombre. Lorsque vous recevez cela dans le servlet, vous calculez une plage basée sur le numéro de page et le nombre de lignes configurées par page.

Consultez la navigation dans de grands ensembles de données (oui, c'est Python mais les mêmes principes s'appliquent) et Requêtes et index de Google Documentation App Engine.

Autres conseils

Si vous maintenez une taille de page de 10, vous pouvez récupérer vos 10 utilisateurs par groupe d'âge pour chaque page en fonction du numéro de page:

SELECT TOP 10 users FROM myusers 
 WHERE AGE = function(page_number) 
 ORDER BY some_ordering

J'espère que JPA + Appengine prend en charge ce type de requête.

Certains moteurs de base de données fournissent des extensions pratiques à SQL uniquement à cette fin. Par exemple, dans MySQL, vous pouvez dire quelque chose du type "sélectionnez ... quelle que soit ... limite 50,10", où "50". est la ligne de départ et 10 le nombre de lignes à récupérer. Ensuite, sur votre page d’affichage, il vous suffit de placer les boutons suivant et précédent qui renvoient le numéro de ligne de départ approprié au serveur pour la prochaine exécution de la requête.

Si le moteur SQL que vous utilisez n'a pas cette fonction pratique, vous devez créer un " spécifique à la requête, où " clause basée sur l'ordre de tri.

Pour prendre un cas simple, supposons que, dans votre exemple, vous affichez les enregistrements dans l'ordre suivant: "nom_utilisateur". Vous pouvez utiliser Statement.setMaxRows (10) pour limiter les requêtes à 10 lignes. Ensuite, lors de votre premier appel, vous exécutez, par exemple, "sélectionnez ... tout ce que vous voulez ... dans l'ordre utilisateur par nom d'utilisateur". Enregistrez le dernier nom d'utilisateur trouvé. Dans votre prochain bouton, vous renvoyez ce nom d'utilisateur au serveur et la requête pour le prochain appel est "sélectionnez ... quel que soit ... de l'utilisateur où nom_utilisateur", "xxx" est commandé par nom d'utilisateur ", où" xxx "est le dernier nom d'utilisateur de l'appel précédent. Refaites setMaxRows pour que vous soyez limité à 10 lignes de sortie. Vous pouvez ensuite laisser l’utilisateur parcourir la totalité de la sortie de cette façon.

Laisser l'utilisateur revenir en arrière est un peu pénible. Je l'ai fait en conservant une table dans une variable de session avec la valeur de clé de départ pour chaque page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top