cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009
-
28 juin 2006 à 17:16
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
3 juil. 2006 à 12:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 3 juil. 2006 à 12:27
RAKIZM, tu n'as qu'a décaler les id quand tu supprimes un article...
rakizm
Messages postés80Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention16 février 2008 3 juil. 2006 à 09:20
tu veux dire utiliser where comme ça :
select id from table where id between $d,$f ;
le pb c ke les id ne sont pas num auto-increment auquel cas limit sera meilleur
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 30 juin 2006 à 15:24
et bien, quand tu fais limit, mysql séléctionne tout les champs de la table, et ne renvoi que les premiers, le temps de calcul est considérable... pour du where, mysql ne séléctionne qu'une partie des lignes : uniquement les bonnes... ce qui rend la requette beaucoup plus rapide...
essai avec EXPLAIN par exemple...
rakizm
Messages postés80Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention16 février 2008 30 juin 2006 à 15:17
coucou qu'est ce que tu racontes??? j'ai pas bien saisi l'histoire du where et limit
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 30 juin 2006 à 15:11
avec un limit; il parcours toute la table, avec un where, il n'en parcours qu'une partie...
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 30 juin 2006 à 14:47
ca marche car tu fais un test sur l'existence du resultat, cependant tu boucles dans tous les cas 15 fois, meme si tu n'as que 5 resultat a affiche ( perte de temps et de ressources => pour moi c'est optimisable)
le foreach te permettra de boucle le nombre de fois qu'il y a de reponse pas de trop ni pas assez
le while c'est pareil ( apres il faut faire des bench pour savoir lequel a le plus rapide), c'est 2 structures de prog sont les plus adaptés a mon sens.
tu fais comme tu le sent. soit tu en affiches 10 par 10 et le suivant => page suivante
1->10 <- précedent
11->20 -> si tu es ici
21->30 -> suivant
ou alors tu affiches le 1er numero de page, le dernier numero de page et x page à droite et a gauche de la position courante
Ca c'est vraiment a ton apréciation
rakizm
Messages postés80Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention16 février 2008 30 juin 2006 à 14:01
garfield je t'assure comme ça ça marche meme pour la dernière page ou il ya que 5 enreg :)
mais il y a plein d'autres chose à faire ex: tu me dis il faut afficher les n°de page à atteindre mais j'en 465 il faut ke j'affiche les 465 liens????
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 30 juin 2006 à 13:55
@Rakizm :
si tu fais :
$f = $d + $nb
tu iras de 1 à 16 => 16 resultats et non 15 comme voulu, peut etre que je me plante dans les index.
Utilises pas une boucle for dans un cas comme ca car tu n'as pas forcement 15 réponses.
A la limite, utilise un foreach ou un while ( avec comme condition $nb affichage fait OU plus de réponse)
quant au limit, je suis oki avec toi coucou747 car c'est une spécif MySQL et non pas SQL.
pour la rapidité, j'ai jamais bencher ca.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 30 juin 2006 à 12:12
limit n'est pas à utiliser pour ce genre de chose, beetwen est bien plus rapide...
arrétez ces <? et ces fermetures de tags trop violentes... c'est crade comme méhode... utilisez <?php et echo à la place
rakizm
Messages postés80Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention16 février 2008 30 juin 2006 à 10:46
re tout le monde pour ceux qui ne l'aurai pas remarqué l'affichage est faut pour afficher 15 lignes par page il faut utiliser une boucle for et non un while
donc ce ki donne :
for ($i=1;$i<=15;$i++)
{
if ($res= dbi_fetch ($temp1,"row",$db_driver))//dbi_fetch à remplacer par mysql_fetch_array ou row
{?>
<? echo $res[0];?>
<? }
}
par contre garfield merci pour la petite formule elle est juste à peu de chose prés "$f $d + $nb - 1"> $f=$d+$nb;
j'ai changé les noms des variables
rakizm
Messages postés80Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention16 février 2008 29 juin 2006 à 17:05
Merci à tous de contribuer à l'amélioration de ce code je vous ferai part des améliorations faites
:)
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 29 juin 2006 à 12:10
@Phalleas_44 : dans ce cas tu te prends la tete pour rien ( et pourquoi pas, utilisez une expression rationnelle ).
1 simple transtypage suffit :
$p = isset($_GET['p']) ? (int) $_GET['p'] : 1 ; // test l'existence de $_GET['p']
if ( $_GET['p'] === 0 ) $p=1 ;
Je trouve son systeme de pagination bizarre.
si tu es a la page 2, son systeme fait
# $p= 2;
# $d=($p+15)-2;//début d'affichage si la page!==1 => $d = 15
# $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page => $f = 30
# $limit $d.",".$f;> $limit = 15,30
ici tout marche nickel, maintenant allons en page 5
# $p= 5;
# $d=($p+15)-2;//début d'affichage si la page!==1 => $d = 18
# $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page => $f = 33
# $limit $d.",".$f;> $limit = 18,33
ca me semble erronée.
perso, je ferai plus un truc du genre
# $nb = 15 // nbre d'info par page
# $d = (($p-1)*$nb) + 1 ;
# $f = $d + $nb - 1
# $limit $d.','.$f
> pour la page 1, $limit = 1,15
> pour la page 2, $limit 16,30
> pour la page 3, $limit 31,45
je pense pas avoir fait d'erreur
En plus d'être très mal codé, ca ne donne pas le résultat que j'excompte pour un système de pagination
Palleas_44
Messages postés130Date d'inscriptionlundi 12 décembre 2005StatutMembreDernière intervention19 avril 2009 29 juin 2006 à 11:36
ouep, rien de ce qui provient de la machine du visisteur n'est fiable, test avant, controle la structure avec sprintf() par exemple etc...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 29 juin 2006 à 09:09
Hello,
à modifier stp.
Je regarderai à mon retour, dans 5 jours.
Mais il y a pas mal de points à revoir, pour que les grands débutants ne voient pas de vilaines habitudes de programmation.
Je rajoute juste, rapidement, à ce qu'a dit Garfield : tu utilises un $_GET directement sans tester son existence. Pas bien.
stepibou
Messages postés112Date d'inscriptionjeudi 11 mars 2004StatutMembreDernière intervention11 octobre 2006 29 juin 2006 à 00:03
cs_garfield90
Messages postés388Date d'inscriptionlundi 7 juillet 2003StatutWebmasterDernière intervention10 février 2009 28 juin 2006 à 17:16
Juste histoire de critiquer, j'ai que ca a faire ;)
bon, un systeme de pagination n'a rien a faire de ton systeme de présentation ( tableau ou paragraphe) => titre mal formulé.
De plus, à la lecture, ton code ne permet que le suivant et/ou le précédent
- ca serait pas mal de donner la possibilité d'aller sur la page X sans faire toutes les pages intermédiaires
- Tu affiches dans tous les cas Precédent ou Suivant qui sont cliquable (avec ou sans effet) ca peut etre amélioré
- Tu devrais donner la possibilité a l'utilisateur de gérer le nombre de 'ligne' par page
- Tu devrais la transformer en fonction
- En lecture, tes variables $p,$f,$d sont incompréhensible au premier coup d'oeil ( on sait pas a quoi elle servent )
- Tu fais 2 requetes quasiment identique, un troncature du tableau de resultat de ta requete serait peut etre mieux (fonction array_slice)
- Tu ouvres et fermes tes balises bcp trop souvent, lecture difficile
- Utilisation de <? en place de <?php
=> code moins portable mais qui marche pour toi ( pas forcement pour tout le monde )
- Tu n'affiches pas le nombre de page donc on sait pas ou on est
En gros, pour moi c'est un source qui est inutile, plein d'erreur
Je crois que c'est a peu pres tout ce qu'il y a dire dessus
3 juil. 2006 à 12:27
3 juil. 2006 à 09:20
select id from table where id between $d,$f ;
le pb c ke les id ne sont pas num auto-increment auquel cas limit sera meilleur
30 juin 2006 à 15:24
essai avec EXPLAIN par exemple...
30 juin 2006 à 15:17
30 juin 2006 à 15:11
30 juin 2006 à 14:47
le foreach te permettra de boucle le nombre de fois qu'il y a de reponse pas de trop ni pas assez
le while c'est pareil ( apres il faut faire des bench pour savoir lequel a le plus rapide), c'est 2 structures de prog sont les plus adaptés a mon sens.
tu fais comme tu le sent. soit tu en affiches 10 par 10 et le suivant => page suivante
1->10 <- précedent
11->20 -> si tu es ici
21->30 -> suivant
ou alors tu affiches le 1er numero de page, le dernier numero de page et x page à droite et a gauche de la position courante
Ca c'est vraiment a ton apréciation
30 juin 2006 à 14:01
mais il y a plein d'autres chose à faire ex: tu me dis il faut afficher les n°de page à atteindre mais j'en 465 il faut ke j'affiche les 465 liens????
30 juin 2006 à 13:55
si tu fais :
$f = $d + $nb
tu iras de 1 à 16 => 16 resultats et non 15 comme voulu, peut etre que je me plante dans les index.
Utilises pas une boucle for dans un cas comme ca car tu n'as pas forcement 15 réponses.
A la limite, utilise un foreach ou un while ( avec comme condition $nb affichage fait OU plus de réponse)
quant au limit, je suis oki avec toi coucou747 car c'est une spécif MySQL et non pas SQL.
pour la rapidité, j'ai jamais bencher ca.
30 juin 2006 à 12:12
arrétez ces <? et ces fermetures de tags trop violentes... c'est crade comme méhode... utilisez <?php et echo à la place
30 juin 2006 à 10:46
donc ce ki donne :
for ($i=1;$i<=15;$i++)
{
if ($res= dbi_fetch ($temp1,"row",$db_driver))//dbi_fetch à remplacer par mysql_fetch_array ou row
{?>
<? echo $res[0];?>
<? }
}
par contre garfield merci pour la petite formule elle est juste à peu de chose prés "$f $d + $nb - 1"> $f=$d+$nb;
j'ai changé les noms des variables
29 juin 2006 à 17:05
:)
29 juin 2006 à 12:10
1 simple transtypage suffit :
$p = isset($_GET['p']) ? (int) $_GET['p'] : 1 ; // test l'existence de $_GET['p']
if ( $_GET['p'] === 0 ) $p=1 ;
Je trouve son systeme de pagination bizarre.
si tu es a la page 2, son systeme fait
# $p= 2;
# $d=($p+15)-2;//début d'affichage si la page!==1 => $d = 15
# $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page => $f = 30
# $limit $d.",".$f;> $limit = 15,30
ici tout marche nickel, maintenant allons en page 5
# $p= 5;
# $d=($p+15)-2;//début d'affichage si la page!==1 => $d = 18
# $f=$d+15;//fin d'affichage dans ce cas 15 affichage par page => $f = 33
# $limit $d.",".$f;> $limit = 18,33
ca me semble erronée.
perso, je ferai plus un truc du genre
# $nb = 15 // nbre d'info par page
# $d = (($p-1)*$nb) + 1 ;
# $f = $d + $nb - 1
# $limit $d.','.$f
> pour la page 1, $limit = 1,15
> pour la page 2, $limit 16,30
> pour la page 3, $limit 31,45
je pense pas avoir fait d'erreur
En plus d'être très mal codé, ca ne donne pas le résultat que j'excompte pour un système de pagination
29 juin 2006 à 11:36
29 juin 2006 à 09:09
à modifier stp.
Je regarderai à mon retour, dans 5 jours.
Mais il y a pas mal de points à revoir, pour que les grands débutants ne voient pas de vilaines habitudes de programmation.
Je rajoute juste, rapidement, à ce qu'a dit Garfield : tu utilises un $_GET directement sans tester son existence. Pas bien.
29 juin 2006 à 00:03
# $d=($p+15)-2;
=>
# else if (isnumeric($p))
# $d=($p+15)-2;
28 juin 2006 à 17:16
bon, un systeme de pagination n'a rien a faire de ton systeme de présentation ( tableau ou paragraphe) => titre mal formulé.
De plus, à la lecture, ton code ne permet que le suivant et/ou le précédent
- ca serait pas mal de donner la possibilité d'aller sur la page X sans faire toutes les pages intermédiaires
- Tu affiches dans tous les cas Precédent ou Suivant qui sont cliquable (avec ou sans effet) ca peut etre amélioré
- Tu devrais donner la possibilité a l'utilisateur de gérer le nombre de 'ligne' par page
- Tu devrais la transformer en fonction
- En lecture, tes variables $p,$f,$d sont incompréhensible au premier coup d'oeil ( on sait pas a quoi elle servent )
- Tu fais 2 requetes quasiment identique, un troncature du tableau de resultat de ta requete serait peut etre mieux (fonction array_slice)
- Tu ouvres et fermes tes balises bcp trop souvent, lecture difficile
- Utilisation de <? en place de <?php
=> code moins portable mais qui marche pour toi ( pas forcement pour tout le monde )
- Tu n'affiches pas le nombre de page donc on sait pas ou on est
En gros, pour moi c'est un source qui est inutile, plein d'erreur
Je crois que c'est a peu pres tout ce qu'il y a dire dessus