Option 1
Je pense qu'en transformant la requête avec un truc du style
'SELECT * FROM info_batiment as i LEFT JOIN batiment as b ON b.ID_batiment = i.ID_Batiment AND ID_membre = "'.$ID_membre.'"'
ça devrait aller mieux.
Option 2 (si l'option 1 ne fonctionne pas)
'SELECT * FROM info_batiment as i LEFT JOIN batiment as b ON b.ID_batiment = i.ID_Batiment WHERE (ID_membre = "'.$ID_membre.'" OR ID_membre is NULL)'
Explications :
La première partie de la requête
SELECT * FROM info_batiment as i LEFT JOIN batiment as b ON b.ID_batiment = i.ID_Batiment
renvoie bien tous les batiments même si le joueur n'en possède pas (l'utilité du left join)
Manque de pot, le WHERE vient filtrer le résultat sur les lignes ayant un ID_membre renseigné.
Si un joueur n'a pas le batiment, la zone ID_Membre sera égale à NULL et la ligne sera exclue par le where
Pour corriger ce problème, il y a deux approches.
La première (l'option 1) intègre l'ID_Membre dans la jointure. Le Where ne joue donc plus le rôle de filtre mais c'est la jointure qui fait maintenant le lien sur ID_Membre.
La 2e (option 2) étend la portée du Where en disant au moteur SQL de récupérer non seulement les lignes avec un ID_Membre correspondant mais aussi celles avec un ID_Membre à NULL. De cette manière, tu recevras ce que tu veux.
Je pense qu'en transformant la requête avec un truc du style
'SELECT * FROM info_batiment as i LEFT JOIN batiment as b ON b.ID_batiment = i.ID_Batiment AND ID_membre = "'.$ID_membre.'"'
ça devrait aller mieux.
Option 2 (si l'option 1 ne fonctionne pas)
'SELECT * FROM info_batiment as i LEFT JOIN batiment as b ON b.ID_batiment = i.ID_Batiment WHERE (ID_membre = "'.$ID_membre.'" OR ID_membre is NULL)'
Explications :
La première partie de la requête
SELECT * FROM info_batiment as i LEFT JOIN batiment as b ON b.ID_batiment = i.ID_Batiment
renvoie bien tous les batiments même si le joueur n'en possède pas (l'utilité du left join)
Manque de pot, le WHERE vient filtrer le résultat sur les lignes ayant un ID_membre renseigné.
Si un joueur n'a pas le batiment, la zone ID_Membre sera égale à NULL et la ligne sera exclue par le where
Pour corriger ce problème, il y a deux approches.
La première (l'option 1) intègre l'ID_Membre dans la jointure. Le Where ne joue donc plus le rôle de filtre mais c'est la jointure qui fait maintenant le lien sur ID_Membre.
La 2e (option 2) étend la portée du Where en disant au moteur SQL de récupérer non seulement les lignes avec un ID_Membre correspondant mais aussi celles avec un ID_Membre à NULL. De cette manière, tu recevras ce que tu veux.
Quand on te dit qu'un projet est terminé à 90%, prépare toi pour les 90% suivant
Ninety-Ninety Rule
"Une guerre de religions, c'est quand deux peuples s'entretuent pour savoir qui a le meilleur ami imaginaire"
Vu sur IRC
Ninety-Ninety Rule
"Une guerre de religions, c'est quand deux peuples s'entretuent pour savoir qui a le meilleur ami imaginaire"
Vu sur IRC