Join 3 tables - 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 : Join 3 tables (/showthread.php?tid=3024) |
Join 3 tables - jldbaro - 07-09-2008 Bonjour, J'essaye de joindre 3 tables dans une requete sql: 1) Joueur 2) Ressource 3) Batiment. Car un joueur peut acheter une mine d'or donc je diminue la ressource_prod.Electricite de 80, Ressource.or -3000 et Batiment.mine =+1 J'ai pas de prob pour faire une jointure de 2 tables mais de 3 j'arrive pas. Quelqu'un à une idée? Merci Requete: UPDATE batiment INNER JOIN ressource_joueur ON batiment.Id = ressource_joueur.Id, INNER JOIN joueur ON batiment.Id = joueur.Id, INNER JOIN ressource_prod ON batiment.Id = ressource_prod.Id SET joueur.Terrain =0, Mine_or =2, ressource_prod.Electricite = -80, ressource_joueur.Or =9964625 WHERE batiment.Id =43 RE: Join 3 tables - Anthor - 07-09-2008 Pas d'alias au champs Mine_or ? RE: Join 3 tables - Argorate - 08-09-2008 Tu peux esseyer de faire des "vrai" jointure: tableX.id = tableY.id AND tableX.id = tableZ.id ... RE: Join 3 tables - Shakkah - 08-09-2008 jldbaro a écrit :UPDATE batiment Tu as quoi comme message d'erreur quand tu essaye de faire cette requête ? Pourquoi as tu mis des virgules après tes jointures ? A part les virgules et l'alias de mine_or la requête me semble correcte essaye celle là : Code : UPDATE batiment Et si celle-là marche pas essaye (Trouver en cherchant sur le net ne faisant quasiment jamais de jointure dans un update, je ne peux pas te dire si ça fonctionne Source) Code : UPDATE batiment RE: Join 3 tables - jldbaro - 08-09-2008 Je ne mets pas de virgule, je récupère le message d'erreur de mysql... Tjs en erreur, et je ne comprends pas... Code PHP :
RE: Join 3 tables - MdE - 08-09-2008 Je vais un peu taper à côté du sujet, mais il y a un truc que je trouve bizarre, tu veux faire perdre 3000 or à ton joueur et tu fais: ressource_joueur.Or =9964625 ??? Mets plutôt cette syntaxe: ressource_joueur.Or = resource_joueur.Or - 3000 Ca va te simplifier des trucs Idem pour le reste: Mine_or = Mine_or+1, ressource_prod.Electricite = ressource_prod.Electricite - 80 Vraiment désolé pour le double post mais je viens de m'apercevoir d'une grosse erreur qui est sûrement la cause du problème: Ne JAMAIS appeler l'un de ses champs "Or" car il y a des erreurs d'interprétations après avec le OU logique ! Donc faut le renommer gold ou PO, enfin, ce que tu veux ! Dans le même style, j'ai mis du temps à découvrir qu'il ne fallait pas utiliser le terme "Force" comme nom pour une donnée. RE: Join 3 tables - Sephi-Chan - 08-09-2008 Or est un mot réservé par MySQL. Il faut juste encadrer le mot de backquotes pour pouvoir l'utiliser, ce qui donne `Or`. Le cas se présente également pour le mot Force, par exemple. Edit : J'avais pas vu que tu avais également cité le cas de Force. Je t'invite donc à regarder dans la liste des mot réservé par MySQL quand tu crée un nouveau champ. Tu peux également encadrer systématiquement tous les noms de champs et d'alias dans ta requête par les backquotes `. Sephi-Chan RE: Join 3 tables - jldbaro - 08-09-2008 MdE a écrit :Je vais un peu taper à côté du sujet, mais il y a un truc que je trouve bizarre, tu veux faire perdre 3000 or à ton joueur et tu fais: Car je récupère la requete SQL (via la page php) et non mon code initial. RE: Join 3 tables - jldbaro - 08-09-2008 La requete correcte est la suivante ;-) Merci quand même ;-) Code PHP :
Sephi-Chan a écrit :Or est un mot réservé par MySQL. Il faut juste encadrer le mot de backquotes pour pouvoir l'utiliser, ce qui donne `Or`. |