|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Bonjour,
j'ai une appli qui liste des remises. La requète qui me permet de retourner la liste contient un tri en descendant sur une date de règlement et un numéro de remise : Code :
Les problèmes suivants se posent : on peut avoir deux remises i telles que datregi < datregj et numremi> numremj. La requète telle qu'elle ne va donc pas m'afficher ces remises là. Et si j'enlève le prédicat numrem, je ne me repositionne pas correctement. Quelqu'un aurait il leu une expérience similaire et pourrai me donner une idée pour m'en sortir? Merci d'avance! |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 625 ![]() |
Bonjour,
Pourriez-vous joindre un jeu de test sommaire, explicitant votre problème actuel + le résulta attendu ? Et préciser le sgbd par la même occasion. |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Merci pour ta réponse.
Supposons que l'on ait deux pages 1 et 2 et que la date de reprise pour aller en page 2 est 30/05/2008 et le numéro de reprise est 1600. Le numéro et la date de reprise correspondent à la 15eme remise (la dernière retournée par la requète) Lorsque je pagine, je réeffectue la requète. L'objectif étant de repositionner le curseur sur la 16eme remise. Deux cas de figure peuvent se présenter : cas 1: Si la remise suivante a pour date 30/05/2008 et comme numéro 1550, le prédicat numrem < 1600 me permet de bien me positionner. cas 2: Si la remise suivante a pour date 30/04/2008 et comme numéro 1650, le prédicat numrem < 1600 ne me permettra pas de bien me positionner. Le SGBD est DB2. As tu besoin d'autres explications? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 625 ![]() |
Ok j'ai compris, un peu long ce matin.
Mais votre problème est indépendant de sql. la couche applicative ne peut-elle pas gérer nativement ce genre de cas ? |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 071 ![]() |
Bonjour,
Pour moi le critère n'est pas bon. Tu dois plutôt chercher les enregistrements qui ont (la même date et un numéro inférieur) OU (une date inférieur) à ta "pagination". Tatayo. |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 932 ![]() |
En fait vous êtes dans un problème de ROW VALUE CONSTRUCTOR. Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/sqlaz/select/#L8
Merci de respectez la charte de postage en donnant le DDL de vos tables et un jeu d'essais sous forme INSERT. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#7 |
![]() ![]() |
Je doute aussi de la pertinence du processus.
Si j'ai bien compris, une requête te donne une liste de données trop longue pour être affichée en une seule page et tu ré-exécute la requête à chaque page. Si entre temps de nouvelles données sont arrivées, ta liste est perturbée. Il faut que le logiciel récupère l'ensemble des données à afficher à un instant T et gère l'affichage par page sans ré-interroger la BDD.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#8 | |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Citation:
Je crains que la pagination soit alors gourmande en nombre d'ordre sql, puiqu' il faut que j'ouvre mon curseur et que je fetch jusqu'à me positionner correctement. |
|
|
|
00
|
|
|
#9 | |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Citation:
De plus, la requète sans restreindre aux 15 premiers éléments pourrait etre trés longue et donc entrainer un U240 (Timout). |
|
|
|
00
|
|
|
#10 | |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Citation:
Et supposons qu'on ait un enregistrement de la première page qui ait comme date 30/06/2008 et comme numéro 1502.L'un des deux critères étant vérifié pour la remise, la requète positionnera alors mon curseur dessus! |
|
|
|
00
|
|
|
#11 | |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Citation:
|
|
|
|
00
|
|
|
#12 | |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Citation:
![]() ![]() Magnifique!!! C'est pile poil mon problème. Merci à tous pour vos réponses!!! |
|
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 071 ![]() |
Citation:
La dernière ligne de la première page a pour date le 30/05/2008 et numéro 1600 La ligne en exemple a pour date 30/06/2005 et numéro 1502. Si tu récupère les lignes dont (la même date et un numéro inférieur) OU (une date inférieur), donc (la date = 30/05/2008 et numero < 1600) ou(date < 30/05/2008) la ligne qui a pour date le 30/06/2008 et numéro 1502 ne sort pas, car la date est supérieure à celle de la dernière ligne de la première page. Aucun des deux critères n'est vérifié. Tatayo. |
|
|
|
00
|
|
|
#14 | |
|
Invité régulier
![]() Inscription : octobre 2007 Messages : 42 ![]() |
Citation:
C'est effectivement ce que j'ai fait. Et du coup je résoud deux problèmes d'un coup : le premier digit du numéro de remise correspond à l'année. Quand on est en 2010, le premier digit est 0. La première requète n'affichait pas les remises de l'année 2010 avant ceux de 2009 (premier digit à 9). Avec ce petit changement, c'ets la date qui est pris en compte en priorité, donc j'aurais mes remises de 2010 en priorité!
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com