IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête de pagination [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut Requête de pagination
    Bonjour,

    J'ai un petit souci avec une requête mysql_query.
    Je souhaite afficher des photos dans une page web, sachant que les chemins d'accès (relatifs) aux photos sont stockés dans les entrées "fichier" de ma table "photo".
    En fait je ne souhaite afficher que 5 photos sur la page, et quand on clique sur une fleche (droite ou gauche), on affiche les 5 photos suivantes (flèche droite) qui sont dans la BDD, ou alors les 5 photos précédentes (fleche gauche).
    Quand je suis sur la première page de photos, il n'y a pas de souci, ça m'affiche les 5 premières photos.
    Par contre dès que j'arrive sur la deuxieme page de photo, ça ne m'affiche plus 5 photos, mais 6 photos. En fait pour être plus précis ça m'affiche la derniere photo de la page suivante des photos.

    Je donne un exemple : j'ai 11 photos dans ma BDD (photo1, photo2, ..., photo11), sachant que je n'affiche que 5 photos par page, il me faudra donc 3 pages pour afficher la totalité des photos.
    Quand je suis sur la premiere page de photo, ca m'affiche bien : photo1 photo2 photo3 photo4 photo5 .
    Quand j'arrive sur la deuxieme page de photos, alors là ça m'affiche : photo6 photo7 photo8 photo9 photo10 photo11 .
    Si je rajoute une 12eme photo, alors sur la deuxieme page de photo, ca m'afficherait : photo6 photo7 photo8 photo9 photo10 photo12.

    J'ai fait quelque test sur le code et j'en arrive à la conclusion que c'est ma requête mysql_query qui doit foirer :

    $retour = mysql_query("SELECT * FROM photo ORDER BY id LIMIT $premiere_photo, $derniere_photo");

    Pour la deuxieme page de photo, $premiere_photo correspond à la premiere photo à afficher, $premiere_photo vaut 5, et ainsi $derniere_photo vaut 10 (dernière photo à afficher).
    Le problème c'est que au lieu de me renvoyer un tableau de 5 lignes, il me renvoie un tableau de 6 lignes, dont la derniere ligne, contient comme je l'ai déjà expliqué, la derniere photo de la page suivante des photos, donc dans mon exemple avec 12 photos, la 6eme ligne du tableau contiendra la photo12.

    Voilà j'espère avoir été clair, et j'attends vos réponses avec impatiente car cela fait maintenant quelques heures que je bataille dessus.

    Merci !

  2. #2
    Membre chevronné
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Par défaut
    alors si j'ai bien lu (c'est qui yavait beaucoup à lire huhu)


    au vue du nom de tes variables je crois bien que tu utilises mal la clause LIMIT :

    petit rappel (source mysql.com)


    LIMIT accepte un ou deux arguments numériques. Ces arguments doivent être des entiers constants.
    Avec un argument, la valeur spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. Si deux arguments sont donnés, le premier indique le décalage du premier enregistrement à retourner, le second donne le nombre maximum d'enregistrement à retourner. Le décalage du premier enregistrement est 0 (pas 1) :

    Pour être compatible avec PostgreSQL, MySQL supporte aussi la syntaxe : LIMIT row_count OFFSET offset.

    mysql> SELECT * FROM table LIMIT 5,10; # Retourne les enregistrements 6 à 15
    pour conclure tu ne devrais pas avoir de variable $derniere_photo mais plutôt
    $nombre_photo_par_page

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut
    Citation Envoyé par Gats Voir le message
    pour conclure tu ne devrais pas avoir de variable $derniere_photo mais plutôt
    $nombre_photo_par_page
    Non car il ne faut pas que j'affiche les photos à partir du début. Par exemple sur la deuxieme page de photo, il faut que j'affiche les photos de 6 à 10, sur la troisieme page, de 11 à 15, etc...
    Ce n'est pas ça le problème.

  4. #4
    Membre chevronné
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Par défaut
    Pour la deuxieme page de photo, $premiere_photo correspond à la premiere photo à afficher, $premiere_photo vaut 5, et ainsi $derniere_photo vaut 10 (dernière photo à afficher).
    Le problème c'est que au lieu de me renvoyer un tableau de 5 lignes, il me renvoie un tableau de 6 lignes, dont la derniere ligne, contient comme je l'ai déjà expliqué, la derniere photo de la page suivante des photos, donc dans mon exemple avec 12 photos, la 6eme ligne du tableau contiendra la photo12.
    LIMIT 5, 10

    6 + 10 = jusqu'au 15 ème enregistrement donc ça renvois 6 lignes (toutes les enregistrements restant)




    Ce que j'écris c'est pour faire du 'pagging' page à page !!


    tu n'afficheras pas depuis le début vu que tu as :

    LIMIT $limit, $reponse_par_page


    $limit étant l'enregistrement sur lequel on doit se positionner
    on peut le trouver par un petit calcule du genre :

    $limite = $reponse_par_page * $selectPage - $reponse_par_page;

    ($selectPage est la page en cours)

    lis bien le texte s'il te plait on va finir par se comprendre

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 13
    Par défaut
    Citation Envoyé par Gats Voir le message
    LIMIT 5, 10

    6 + 10 = jusqu'au 15 ème enregistrement donc ça renvois 6 lignes (toutes les enregistrements restant)




    Ce que j'écris c'est pour faire du 'pagging' page à page !!


    tu n'afficheras pas depuis le début vu que tu as :

    LIMIT $limit, $reponse_par_page


    $limit étant l'enregistrement sur lequel on doit se positionner
    on peut le trouver par un petit calcule du genre :

    $limite = $reponse_par_page * $selectPage - $reponse_par_page;

    ($selectPage est la page en cours)

    lis bien le texte s'il te plait on va finir par se comprendre
    Merci Gats ça marche.
    En fait ça renvoyait un tableau de 6 là, parce qu'il ne me restait plus que 6 photos (11 en tout), mais par contre si j'avais 20 photos en tout, alors j'aurais récupéré un tableau de 10, puisque j'avais spécifié à Mysql de me donner 10 photos à partir de la 5eme, c'est bien ça ?
    Encore merci !! Je n'aurais pas trouvé tout seul !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] requête et pagination
    Par manuso dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/05/2011, 23h05
  2. [MySQL] Affichage requête aléatoire paginé
    Par bodysplash007 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 22/05/2007, 11h52
  3. Pagination des résultats d'une requête
    Par dl_jarod dans le forum ASP
    Réponses: 2
    Dernier message: 17/10/2005, 14h30
  4. Requête dynamique en pagination
    Par pascal_fluck@hotmail.com dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/03/2005, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo