JeuWeb - Crée ton jeu par navigateur

Version complète : [reglé]Tentative de jointure
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
J'ai 6 tables: info_carte, the_personnage, grade_europe_e, grade_europe_o, grade_afrique, grade_pacifique. (enfin un peu plus, mais bon, ce sont celle qui nous intéresse ici ^^)

Table: info_carte
Colonne 1: theatre = contient le theatre d'opération (europe_e, europe_o, pacifique ou afrique)

Table: the_personnage
Colonne 1: id
Colonne 2: alliance (contient axe ou allie)
Colonne 3: nom
Colonne 4: compte
etc...
Colonne X: grade (contient un numéro: 1,2 etc...)

Table: grade_X (les 4 tables sont identiques mais ne possèdent pas le même remplissage)
Colonne 1: id
Colonne 2: axe (contient le nom des grades pour l'axe)
Colonne 3: allie (contient le nom des grades pour les allies)
Colonne 4: pc_requis

Donc le but de la manoeuvre, c'est d'afficher le grade du personnage. Grade qui n'aura pas le même nom suivant les théâtres d'opérations.

Je pense que dans ce cas, il faut une jointure (ma première... Ouais !) mais hélas, ça ne se passe pas comme je l'espérais... snif !

Voici la partie de code concernée (il est un peu réduit volontairement Wink):

Code PHP :
<?php 
$requete_info_carte
= mysql_query("SELECT * FROM info_carte");
$info_carte = mysql_fetch_assoc($requete_info_carte);

$theatre = $info_carte['theatre'];

$requete_affichage_perso = mysql_query("SELECT the_personnage.*, grade_$theatre.id AS grade_id, grade_$theatre.axe,
grade_
$theatre.allie FROM the_personnage INNER JOIN grade_$theatre ON the_personnage.grade = grade_id WHERE `compte`='$pseudo_joueur'");
$affichage_perso = mysql_fetch_assoc($requete_affichage_perso);

echo
'<table>';
echo
'<tr>';
echo
'<th><img src=image/camps/'.$theatre.'/'.$affichage_perso['alliance'].'.gif></th>';
echo
'<th>Nom</th>';
echo
'<td> '.$affichage_perso['nom'].' </td>';
echo
'<th>Grade</th>';
echo
'<td> '.$affichage_perso['grade'].' </td>';
echo
'</tr>';
echo
'</table>';

Mon message d'erreur:
Citation :Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\documents and settings\hp_administrateur\mes documents\projet_aegis\jeu\interface_jeu\interface.php on line 37

Donc visiblement, le problème viendrait de:
Code PHP :
<?php 
$affichage_perso
= mysql_fetch_assoc($requete_affichage_perso);

Donc si ça vient bien de ceci, quelle fonction utiliser pour pouvoir dispatcher les résultats de ce genre de chose ?
Sinon, le problème viendrait d'où selon vous ?

Merci d'avance pour votre aide Smile

PS: si vous voyez d'autre chose horrible, n'hésitez pas a le signaler !
affiche ta requete puis teste là dans phpmyadmin. à mon avis, ça vient pê de la jointure, ça se fait sur le nom du champ, pas sur un alias de résultat. (

sinon coté structure de base de données, ça me parait louche... pourquoi ne pas ajouter une table contenant le camp ( afrique, pacifique, ... ) ?
ça simplifiera pas mal tes requetes.

A+

Pascal

PS : va faire un tour sur le tutorial SQL dans ma signature, ça t'aidera à débugguer.
Pour ma part je n'ai jamais fait de jointures (je n'en ai jamais trouvé l'utilité), mais je peux quand même te dire ce que je ferais.
Pour récupérer le grade :
Code PHP :
<?php 
$requete_affichage_perso
= "SELECT grade_$theatre.nom FROM grade_$theatre, the_personnage WHERE the_personnage.grade_id=grade_$theatre.id";

Je pense que ça va marcher
Nessper a écrit :Pour ma part je n'ai jamais fait de jointures (je n'en ai jamais trouvé l'utilité), mais je peux quand même te dire ce que je ferais.
Pour récupérer le grade :
Code PHP :
<?php 
$requete_affichage_perso
= "SELECT grade_$theatre.nom FROM grade_$theatre, the_personnage WHERE the_personnage.grade_id=grade_$theatre.id";

Je pense que ça va marcher

tu fais des jointures sans le savoir Wink

une condition sur les id entre 2 tables, c'est une jointure Tongue

A+

Pascal
ah ok ^^. Mais alors quel intérêt de faire une "vraie" jointure ? plus rapide ?
concernant la rapidité, je ne sais pas.

par contre on peut faire dans une jointure des trucs plus difficiles à faire avec un WHERE :
_ toutes les lignes d'une table, avec un lien optionnel dans la 2e table
_ toutes les lignes d'une table qui n'ont pas de correspondance dans la 2e table

c'est aussi une question de lisibilité de requête :
_ les relations entre tables = les jointures
_ les conditions sur les données ( ex : id du joueur connecté ) : WHERE

A+

Pascal
Bon, j'ai une erreur directement dans phpmyadmin :hahahaha:

Citation :#1064 - Erreur de syntaxe pr�s de '"SELECT the_personnage.*, grade_$theatre.id AS grade_id, grade_$' � la ligne 1

hum, par contre, je ne vois pas (ou je ne comprend pas) ceci:
Citation :ça se fait sur le nom du champ, pas sur un alias de résultat

Enfin:
Citation :pourquoi ne pas ajouter une table contenant le camp (afrique, pacifique, ... )

Parce que Afrique, Pacifique etc... ne sont pas des camps mais des théâtres d'opérations Wink
Si on résume mes camps, on arrive a une confrontation binaire Axe/Allie.
Mais suivant le théâtre, la confrontation n'est pas la même:
Ex: Europe_O:
On a USA/Allemagne
Europe_E
On a URSS/Allemagne etc...

Le but de la manoeuvre étant de pouvoir modifier les noms des personnages (les différents noms sont saisie a l'inscription mais je souhaite garder les même personnages [caract, xp etc...]) et leur grade en quelques clics dans un formulaire.
J'espère que j'ai bien compris ce que tu me dis...
on voit les $ des variables, donc elles ne sont pas interprétées dans la requete

2 solutions :
_ concaténation
_ la fonction sprintf()

A+

Pascal
Donc si je comprend bien, la requête interprète le nom du champ ainsi:

grade_$theatre

Et non, grade_europe_e (dans le cas où $theatre = europe_e).

Exact ?
apparemment, oui
Pages : 1 2