Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2010, 16h03   #1
Membre du Club
 
Homme
Développeur Web
Inscription : juillet 2009
Messages : 54
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 : 54
Points : 27
Points : 27
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 :
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");
gambic est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 18/11/2010, 16h47   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Peux-tu nous décrire le problème ?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 04h26   #3
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 648
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 648
Points : 527
Points : 527
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 :
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.
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 11h58   #4
Membre du Club
 
Homme
Développeur Web
Inscription : juillet 2009
Messages : 54
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 : 54
Points : 27
Points : 27
Merci FMaz, c'était bien ça mon problème, ça marche maintenant
gambic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2010, 17h30   #5
Membre expérimenté
 
Avatar de FMaz
 
Inscription : mars 2005
Messages : 648
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 648
Points : 527
Points : 527
... eeeeeet 1 morceau de robot pour moi
FMaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h43.


 
 
 
 
Partenaires

Hébergement Web