Affichage query sur plusieurs page

raf0002 Messages postés 2 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 10 septembre 2003 - 10 sept. 2003 à 17:35
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006 - 12 sept. 2003 à 01:13
Salut à tous,

Je veux afficher le résultat d'une query sur plusieurs pages, ma query me
sort 9300 enregistrements et je voudrais paginer par paquet de par exemple
50.

Actuelement, j'y arrive en comptant le nombre d'enregistrement, ensuite en
les affichants par 50 et avec deux liens pour aller 50 après et avant. Mais
je travaille avec les id de la table, hors si au millieu de ma liste j'ai un
enregistrement qui a été supprimé et qui était l'id 142 et que j'affiche les
id de 100 à 150, il ne m'en affiche que 49 au lieu de 50...

Mon but est vraiment de ne prendre que 50 résultats dans la table car si je
sort les 9300 et que je n'en n'affiche que 50, le serveur commence à
pleurer.

Est ce vous voyez une solution

Merci d'avance à tous

Raph

4 réponses

cs_Metrox Messages postés 267 Date d'inscription jeudi 19 septembre 2002 Statut Membre Dernière intervention 8 septembre 2013
10 sept. 2003 à 17:46
Skyride avait sorti une source permettant de paginer les résultats d'une requête... je te la note ci dessous, et je l'ai adaptée à tes besoins...

<!-- Requête de sélection des produits -->
<cfquery name= "listproduit" datasource="pagination">
SELECT * FROM PRODUIT
</cfquery>

<!-- A vous de paramétrer ces 2 variables -->
<cfset NbNumberPage = 10000> <!-- Nombre de numéros de pages affichées -->
<cfset NbEnregByPage = 50> <!-- Nombre d'enregistrements par page -->

<cfset NbPage = (listproduit.recordcount \ NbEnregByPage)>

<cfif #evaluate(listproduit.recordcount mod NbEnregByPage)# is not 0>
<cfset NbPage = NbPage + 1>
</cfif>

<cfset url.corps="cf_produit_liste.cfm">

<cfif IsDefined('url.page')>
<cfset recherche_debut=((url.page-1)*NbEnregByPage)+1>
<cfelse>
<cfset recherche_debut=1>
<cfset url.page = 1>
</cfif>
<cfoutput>URL PAGE : #url.page#</cfoutput>


<cfif listproduit.recordcount GT 0>
<center>
<cfoutput>
Page #url.page# / #NbPage#

#listproduit.recordcount# produits(s) trouvé(s)

</cfoutput>

<cfif url.page GT NbNumberPage>
<cfoutput>
[#CGI.PATH_INFO#?corps=#url.corps#&page=#Evaluate((((url.page\NbNumberPage)*NbNumberPage)+1) - NbNumberPage)# [<<] ]
</cfoutput>
</cfif>

<cfif url.page GT 1>
<cfoutput>
[#CGI.PATH_INFO#?corps =#url.corps#&page= #Evaluate(url.page - 1)# [<] ]
</cfoutput>
</cfif>

<cfif listproduit.recordcount GT NbEnregByPage>
<cfoutput>
<cfloop index ="curpg" from= "#Evaluate(((url.page\NbNumberPage)*NbNumberPage)+1)#" to="#Evaluate((((url.page\NbNumberPage)+1)*NbNumberPage))#" step="1">
<cfif listproduit.recordcount gt (curpg - 1) * NbEnregByPage>
<cfif curpg is not url.page>
[#CGI.PATH_INFO#?corps=#url.corps#&page=#curpg# #curpg#]
<cfelse>
#curpg#
</cfif>
</cfif>
</cfloop>
</cfoutput>
</cfif>

<cfif url.page * NbEnregByPage lt listproduit.recordcount>
<cfoutput>
[#CGI.PATH_INFO#?corps=#url.corps#&page=#Evaluate(url.page + 1)# [>] ]
</cfoutput>
</cfif>

<cfif (url.page\NbNumberPage) lt (listproduit.recordcount\(NbEnregByPage*NbNumberPage))>
<cfoutput>
[#CGI.PATH_INFO#?corps =#url.corps#&page= #Evaluate((((url.page\NbNumberPage)+1)*NbNumberPage)+1)# [>>] ]
</cfoutput>
</cfif>


<cfoutput query ="listproduit" startrow="#recherche_debut#" maxrows="#NbEnregByPage#">
Réference : #PROD_ID#

</cfoutput>
</center>
</cfif>


</HTML>

M@x ---> Go on www.metrox.be
0
raf0002 Messages postés 2 Date d'inscription lundi 11 août 2003 Statut Membre Dernière intervention 10 septembre 2003
10 sept. 2003 à 19:14
Superbe, merci beaucoup, un peu customisation et ceci est vraiment nikel et surtout très simple, pourquoi n'y avais-je pas pensée... Certainement un peu de fatigue :)

Enccore merci

Raph
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
11 sept. 2003 à 22:56
Alors moi je vais nuancer cette solution !! Parce ke le SGBD ki te ramene 9300 réponses, je pense po k'il aime !!
Donc je te propose une requete en 2 étapes :
D'une, tu fais un Select count(*) dans ta table --> Réponse 9300
Et deux (solution si tu es sous SQL Server) Select TOP #Toto# * from Ta_Table
Pourkoa, tout simplement pour solliciter le moins le SGBD ki te rameneras plus les 9300 lignes !! Le pov' il faut le soulager !! LOL !! Et puis tu devrais avoir de meilleurs temps de réponses, sur en montée en charge.
S.
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
12 sept. 2003 à 01:13
Vu que ca l'air d'atre une requete globale.
Perso j'hesite entre 2 options
- cacher la requete (pour eviter de faire travailler la bdd)
- copier le resultat de la requete dans une structure en session ou server (suivant)

mes 2 cts

LaurenT
0
Rejoignez-nous