[De nouveau Regle] Petit probleme chiant - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [De nouveau Regle] Petit probleme chiant (/showthread.php?tid=1422) |
[De nouveau Regle] Petit probleme chiant - Istarie - 05-07-2007 Bonjour, Je crée un script qui permet d'afficher un liste de batiment qui se trouve dans la bdd. Citation :CREATE TABLE info_batiment ( Et j'ai une autre table qui permet de regrouper les niveau de chaque bâtiment au joueur respectif. Citation :CREATE TABLE batiment ( Voila mon code : Code PHP :
[EDIT] Ce que je devrais avoir ID_batiment 1 --> Ferme Niveau 3 ID_batiment 2 --> Carrière de Pierre Niveau 4 Ce que j'ai ID_batiment 1 --> Ferme Niveau 1 ID_batiment 2 --> Carrière de Pierre Niveau 3 RE: Petit probleme chiant - Roworll - 05-07-2007 [Message édité plusieurs fois mais je suis trèèèèès fatigué...] Le test Code PHP :
Du coup, tu as un décalage entre le niveau du batiment et ce que tu affiches. De plus, tu fais trop de requêtes sur la BDD. 1 requête pour avoir les batiments + une requtete pour chaque batiment dans la liste. Le mieux à mon avis est faire une seule requête avec une jointure. Petit squelette rapide : Code PHP :
Je ne garantis pas le résultat.. je dors debout... RE: Petit probleme chiant - Istarie - 05-07-2007 Il y avais un petit oublie de parenthèse ici Code PHP :
RE: [Plus Regle] Petit probleme chiant - Istarie - 06-07-2007 Désolée du double post. J'ai encore un petit problème avec se script c'est que la table 'batiment' s'ajoute que quand il a évoluer une fois le bâtiment. Donc au départ tout les bâtiment sont a 0 Niveau donc la table bâtiment reste vide tant que le joueur n'évolue pas le bâtiment. Avec ce script les bâtiments ne s'affiche pas tous : il affiche que les bâtiment déjà évoluer mais quelqu'un aurait une idée pour débloquer sa sans refaire le script RE: [Plus Regle] Petit probleme chiant - Roworll - 06-07-2007 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. RE: [Plus Regle] Petit probleme chiant - Istarie - 06-07-2007 Merci c'est bon sa marche maintenant j'ai fait tout les test normalement j'en est fini avec cette partie. Merci. |