14-12-2008, 06:31 PM
En fait, il faut comprendre comment ça marche. Ensuite, il te suffira de faire des essais dans phpMyAdmin.
Voyons comment fonctionne la requête :
Voyons comment fonctionne la requête :
Code PHP :
<?php
SELECT cases.*,
coffres.nom AS coffre_nom, # Tu spécifies
coffres.x AS coffre_x, # les champs utiles
coffres.y AS coffres_y, # un par un et tu
clans.nom AS clan_nom, # leurs donne un
clans.x AS clan_x, # alias pour éviter
clans.y AS clan_y, # les collisions de nom.
personnages.id AS personnage_id
personnages.nom AS personnage_nom
FROM cases
LEFT JOIN coffres
ON coffres.x = cases.x
AND coffres.y = cases.y
LEFT JOIN clans
ON clans.x = cases.x
AND clans.y = cases.y
# Autres jointures…
LEFT JOIN personnages
ON personnages.x = cases.x
AND personnages.y = cases.y
WHERE cases.x BETWEEN x_min AND x_max
AND cases.y BETWEEN y_min AND y_max
Dans un premier temps, MySQL va sélectionner les informations de la table cases, qui contient les cases de ta carte (avec leur coordonnées x et y).
Il commence donc à chercher dans la table (en restant de la cadre de sa clause WHERE), il commence une boucle.
Comme on lui à indiqué par la ligne LEFT JOIN coffres ON coffres.x = cases.x AND coffres.y = cases.y. Là il regarde dans la table coffres s'il y a des coffres dont le champ x a la même valeur que le champ x de la case qu'il parcourt. Il fait la même chose avec le champ y du coffre, qu'il compare avec le champ y de la case.
S'il trouve quelque chose, il remplit les cases qui concernent les coffres.
Si non, il met des valeurs nulles dans ces cases.
Ensuite, il évalue la jointure suivante de la même manière.
Quand il a fini d'évaluer les jointures, il passe à la case suivante, avec laquelle il recommence ce processus.
Au final, il a un tableau contenant toutes les cases (une ligne par case) avec des informations ou pas dans les cases.
Entraîne-toi à faire des jointures dans ton phpMyAdmin en n'en faisant qu'une (celle des coffres, par exemple), puis quand ça marche comme tu le souhaite, tu en rajoutes une, et ainsi de suite.
N'oublie pas également de nous préciser si une case peut accueillir plusieurs éléments (coffre, personnage, etc.), car ça complique un peu la chose.
Sephi-Chan