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 :

Pagination avec Join [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 83
    Par défaut Pagination avec Join
    Bonjour,

    j'ai une requête utilisant plusieurs JOIN, et on dirait que ça pose des problèmes à mon système de pagination automatique...

    Voici mon code, si quelqu'un comprend le bug je suis preneur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $nb_total_stages = $connexion->query("SELECT COUNT('id_stage') FROM stages")->fetchColumn();
     
    $stagesParPage=10; // nb de messages par page
    $nb_pages=ceil($nb_total_stages/$stagesParPage); // comptage du nombre de pages
     
    $pageActuelle = (isset($_GET['page'])) ? intval($_GET['page']) : $pageActuelle=1;
     
    if($pageActuelle>$nb_pages) { $pageActuelle=$nb_pages; } // pour éviter que $pageActuelle soit supérieure à $nb_pages
    $premiereEntree=($pageActuelle-1)*$stagesParPage; // 1ère entrée à lire dans la page courante
     
    $reqAffichStages=$connexion->query("SELECT *, stages.id_stage AS stage_stage_id, stagiaires.id_stage AS stagiaire_stage_id, acheteurs.id_acheteur AS acheteur_acheteur_id, stagiaires.id_acheteur AS stagiaire_acheteur_id FROM stages LEFT JOIN stagiaires ON (stages.id_stage = stagiaires.id_stage) LEFT JOIN acheteurs ON (acheteurs.id_acheteur = stagiaires.id_acheteur) WHERE stages.id_stage !=1 ORDER BY stages.date_stage DESC LIMIT $premiereEntree, $stagesParPage");

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Peux-tu nous décrire le problème ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    Je crois comprendre quel est le problème.

    Lorsque tu fait un left join, il se peut que tu ai plusieurs résultat pour la jointure concernant une seule ligne. Exemple: un livre qui aurait plusieurs autheurs:

    livre1 ; Autheur A
    livre1 ; Autheur B
    livre2 ; Autheur C

    Toujours selon mon exemple: tu veux sélectionner seulement les 2 premiers livres, donc tu fais un LIMIT 2:

    livre1 ; Autheur A
    livre1 ; Autheur B

    le limit s'applique sur les résultats, et non sur les résultats de la première table.

    Si tu souhaite vraiment limiter au niveau des livres (ou des stages dans ton cas), tu devra faire une sous requête, qui elle va gérer ton LIMIT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT *, stages.id_stage AS stage_stage_id, stagiaires.id_stage AS stagiaire_stage_id, acheteurs.id_acheteur AS acheteur_acheteur_id, stagiaires.id_acheteur AS stagiaire_acheteur_id
     
    FROM (SELECT *
                FROM stages
                WHERE stages.id_stage !=1
                LIMIT $premiereEntree, $stagesParPage
                ORDER BY stages.date_stage DESC
             ) as stages
    LEFT JOIN stagiaires ON (stages.id_stage = stagiaires.id_stage)
    LEFT JOIN acheteurs ON (acheteurs.id_acheteur = stagiaires.id_acheteur)
    ... ou un truc du genre.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 83
    Par défaut
    Merci FMaz, c'était bien ça mon problème, ça marche maintenant

  5. #5
    Membre chevronné
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Par défaut
    ... eeeeeet 1 morceau de robot pour moi

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

Discussions similaires

  1. UPDATE avec JOIN ?
    Par zakuli dans le forum Débuter
    Réponses: 3
    Dernier message: 25/07/2007, 14h53
  2. [Hibernate]Problème de requete avec "join fetch"
    Par gauloiskiki dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/06/2006, 09h54
  3. [SQL] Problème de pagination avec tableau
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/05/2006, 22h16
  4. [C#] Comment gérer la pagination avec un GridView ?
    Par appwnet dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/05/2006, 13h47
  5. [SQL-Server] Pagination avec mssql
    Par crevettepourrie dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/01/2006, 12h35

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