> Tech > Trouver la position d’un livre

Trouver la position d’un livre

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

A présent, nous pouvons rechercher les livres à  renvoyer dans l'ensemble de résultats. La version actuelle de SQL/400 ne permet pas d'indiquer que l'on souhaite sélectionner les N premiers enregistrements (cependant, cette fonction devrait être disponible dans d'autres implémentations du SQL). On est donc contraint de lire les

Trouver la position d’un livre

enregistrements les uns après les autres dans un ordre décroissant par rapport
à  la colonne de classement et de compter jusqu’à  ce que l’on atteigne le
nombre de lignes désiré. Le curseur BookSaleCursor déclaré en E fournit la
table de résultats ordonnée de TotalUnits entrées pour les ventes de livres réalisées
la semaine précédente dans la catégorie spécifiée. Le curseur est ouvert en
L, puis une boucle (en N) récupère les lignes jusqu’à  ce qu’il n’y ait plus
aucune ligne ou que le nombre de lignes défini ait été récupéré, ou encore
qu’une erreur se soit produite. Chaque instruction Fetch exécutée avec succès
réinitialise la valeur de la variable de travail RankTotalUnits à  la valeur récupérée
dans la colonne TotalUnits. Une fois la boucle terminée, le curseur est refermé
(O).

Les livres qui ont le même
TotalUnits sont ex à¦quo, et le nombre approprié
de places est sauté pour déterminer le véritable rang du ou des livres
suivants

           
Remarquez comment, dans la boucle, la
variable de travail CurRank est incrémentée pour chaque enregistrement récupéré,
et ce, sans se soucier de la valeur TotalUnits de l’enregistrement. Cette
technique simple fonctionne même lorsque certaines lignes possèdent la même
valeur TotalUnits, car tout ce qu’il nous faut trouver est un livre dans
l’ensemble des livres qui possèdent le rang spécifié par le paramètre
CategoryRankIn. Considérez l’exemple suivant des six meilleures ventes de
livres :

Nombre total  
Rang   Valeur CurRank

           
16           
1           
1

           
12           
2           
2

           
12           
2           
3

           
11           
4           
4

           
10           
5           
5

           
10           
5           
6

Vous pouvez constater que les livres qui ont la même
valeur TotalUnits sont ex à¦quo dans le palmarès,
et que le nombre approprié de places est omis pour déterminer le rang véritable
du ou des livres suivants dans l’ordre de classement des ventes. Cependant, la
boucle de la procédure GetTopBook, assigne uniquement des rangs séquentiels à 
chaque livre au fur et à  mesure qu’ils sont récupérés. Cela ne crée aucun
problème car pour trouver les livres classés en cinquième position ou mieux,
par exemple, on peut lire l’une ou l’autre des deux lignes possédant un
TotalUnits de 10. L’important est de déterminer que 10 représente la valeur
seuil de TotalUnits pour les livres que l’on souhaite inclure dans l’ensemble de
résultats renvoyé. Dans ce cas, l’ensemble de résultats inclurait six livres,
et non cinq.

           
Vous pouvez constater que j’ai affecté
à  la variable à  RankTotalUnits la valeur MaxInt (M) avant la boucle. Si aucune
ligne ne satisfait la condition de recherche du curseur, la boucle ne récupérera
aucune ligne et RankTotalUnits restera égale à  MaxInt, qui représente une
valeur seuil au-dessus de la valeur TotalUnits de n’importe quel livre (au moins
dans notre exemple). Cette approche n’est pas véritablement essentielle compte
tenu de la manière dont j’ai implémenté le reste de la procédure cataloguée,
mais elle garantit que RankTotalUnits possède une valeur précise à  la fin de
la boucle.

Téléchargez cette ressource

Les mégatendances cybersécurité et cyber protection 2024

Les mégatendances cybersécurité et cyber protection 2024

L'évolution du paysage des menaces et les conséquences sur votre infrastructure, vos outils de contrôles de sécurité IT existants. EPP, XDR, EDR, IA, découvrez la synthèse des conseils et recommandations à appliquer dans votre organisation.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010