Requête d'affichage des bâtiments en fonction de la race.. - 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 : Requête d'affichage des bâtiments en fonction de la race.. (/showthread.php?tid=469) |
Requête d'affichage des bâtiments en fonction de la race.. - zneman - 01-01-2011 Bien le bonjour ! Cela fait des mois que je ne suis pas venu sur ce forum, il est temps pour moi de le re-fréquenter activement ! :amoureux2: Quoi qu'il en soit, je commence par vous poser une petite colle ! (ou pas) Enfin bref, je bloque là dessus... Voilà donc le problème: Je veux: chercher tout les bâtiments de la table c_batiments et joindre les données de t_batiment en fonction de type= FK_cBatiment. Avec FK_joueur = x OR FK_joueur IS NULL (ça ça marche pas ) c_batiments contient les bâtiments disponibles dans le jeu, c'est à dire: le type de bâtiment (1 = maison, 2 = caserne par exemple), etc.. t_batiments contient les bâtiments que possède le joueur Donc en gros, cette requête doit me chercher tous les bâtiments que je possède OU non. ----------------------------- N'arrivant pas à faire ceci, je me suis porté sur un système à deux requêtes, une qui va chercher les bâtiments que j'ai et une autre qui va chercher les bâtiments que je n'ai pas encore (ceux qui sont donc dans c_batiment mais pas dans t_batiment). Voila donc les requêtes qui ne fonctionnent pas (décidément, rien ne fonctionne ><) Celle pour afficher les bâtiments qu'on possède: Citation :SELECT * FROM t_batiment LEFT JOIN c_batiment ON t_batiment.FK_cBatiment = c_batiment.type WHERE FK_cRace = '3' AND t_batiment.FK_joueur = '17' Celle pour afficher les bâtiment qu'on possède pas: Citation :SELECT c_batiment.* FROM c_batiment WHERE FK_cRace = '3' AND type NOT IN( SELECT type FROM t_batiment LEFT JOIN c_batiment ON t_batiment.FK_cBatiment = c_batiment.type WHERE FK_cRace = '3' AND t_batiment.FK_joueur = '17' ORDER BY type) ORDER BY type Merci d'avance à vous pour votre aide Bonne année au passage ! RE: Requête d'affichage des bâtiments en fonction de la race.. - php_addict - 01-01-2011 as tu lu des tutos sur les jointures? au pif: LEFT JOIN t_batiments ON t_batiments.id = c_batiments.id RE: Requête d'affichage des bâtiments en fonction de la race.. - zneman - 01-01-2011 Dans une jointure je crois qu'on peut aussi bien faire un LEFT JOIN t_batiments ON t_batiments.id = c_batiments.id qu'un LEFT JOIN t_batiments ON c_batiments.id = t_batiment.id Bien que je sois d'accord pour dire que c'est plus logique dans le premier cas de figure (à confirmer si ça fonctionne dans les deux sens mais je pense que oui) Quoi qu'il en soit, là n'est pas le problème :/ RE: Requête d'affichage des bâtiments en fonction de la race.. - niahoo - 01-01-2011 select c.*, t.player_id from c_batiments c left join t_batiments t on c.id = t.id and t.player_id = <id du joueur> ou sinon la même en remplaçant 'and' par 'where' ce qui serait plus correct mais je me rappelle plus du comportement avec les left join, ça fait trop longtemps que j'ai pas tripatouillé de DB RE: Requête d'affichage des bâtiments en fonction de la race.. - zneman - 01-01-2011 (01-01-2011, 07:24 PM)niahoo a écrit : select c.*, t.player_id from c_batiments c left join t_batiments t on c.id = t.id and t.player_id = <id du joueur> Non non, ceci ne change rien ! Ta requête est fonctionnelle mais n'affiche pas ce que je cherche :/ J'explique: Si je me connecte avec le joueur "11" sa marche, mais si je me connecte avec le joueur 17 qui n'a pas le bâtiment en sa possession ça prendra la première information que MySQL trouvera qui complète la jointure(les données du joueur 11) et vu que FK_joueur sera égal à 11 et non à 17, le joueur 17 ne verra rien d'affiché, ce qui m'embête car je recherche un affichage absolument moi ! Merci à vous de m'aider à chercher ! RE: Requête d'affichage des bâtiments en fonction de la race.. - Hideaki - 01-01-2011 Bonjour ! Essaye cette requête, elle devrait te renvoyer la liste des bâtiments, si les colonnes liées à t_batiment sont null, c'est qu'il ne les a pas
Sinon voici le meilleur site contenant des tutoriels et des cours SQL du net en langue française. RE: Requête d'affichage des bâtiments en fonction de la race.. - zneman - 01-01-2011 (01-01-2011, 07:45 PM)Hideaki a écrit : Bonjour ! En effet, cette requête fonctionne ! Je ne connaissais pas le OUTER (ou alors je l'ai zappé lors d'un de mes cours de SQL...). Petite modification toutefois pour ne pas prendre tous les bâtiments de toutes les races:
Merci beaucoup à toi, c'est sur ce genre de problème qu'on bloque parfois longtemps ^^ |