Help en mysql avec plusieurs tables (php)

salut a tous,
je suis actuellement en train de travailler sur un projet RPG en php.
J’ai donc réalisé une carte dynamique qui affiche les joueurs les villes et les elements autours du joueur.
maintenant, je gere les deplacements du joueurs.
je detaille :
une table rpg_users qui contient plein de choses dont latitude et longitude
( compris entre -250 et 250 )

le joueur avance grace a 4 bouttons ( nord sud est ouest ) et de la on incremente ou decremente sa latitude / longitude.

Mais avant de mettre a jour la table user, il faut s’assurer qu’il n’y a rien a l’endroit voulu ou justement reagir en fonction.

rpg_sol : contient le nom d’un element latitude longitude passable ( 0 ou 1 ) prix 0 > infini
rpg_towns latitude longitude etc …

me faudrait donc un ptit coup de main pour faire un truc du genre :

select * from 3 tables ou latitude=latitude et longitude=longitude

ou un truc comme ça car les fonctions a 3 tests ça m’enerve un peu.
Si vous voyez un peu ce que je veux faire …

merci :stuck_out_tongue:

Tu utilises pas les jointures ?

[quote name=‘kineox’ date=’ 5 Mar 2005, 17:27’]Tu utilises pas les jointures ?
[right][post=“338622”]<{POST_SNAPBACK}>[/post][/right][/quote]
Je suis pas tres fort en mysql : je n’utilise que le select update where like et order, apres je connais pas.
donc au non, pas de jointures, je connais pas.

c’est quoi en gros ?
( si trop complexe dite moi vite fait je demanderai à google)

Et une matrice ou tu accedes a tes elements en prout[x][y](et p-e [z]) ce serait pas plus adapte pour ce que tu veux faire ? Et apres, tu inventes un codage, genre 1=monstre, 2=tresor, 3=mur… et tu fous un switch/case et voila ? Je veux bien qu’on foute du mysql partout, mais pour un jeux 2D, je doute franchement que ce soit la solution la plus adaptee…

[quote name=‘fser’ date=’ 5 Mar 2005, 17:35’]Je suis pas tres fort en mysql : je n’utilise que le select update where like et order, apres je connais pas.
donc au non, pas de jointures, je connais pas.
[right][post=“338625”]<{POST_SNAPBACK}>[/post][/right][/quote]

Je te conseille dans ce cas là d’apprendre le sql et tout ce qu’on peut faire avec. Parce que là deployer une base sql juste pour faire un jeu tout con, sans utiliser aucune fonction “avancée” (même si les jointures c’est les bases) comme le dit unreal ça ne sert à rien.

[quote name=‹ kineox › date=’ 5 Mar 2005, 18:11’]Je te conseille dans ce cas là d’apprendre le sql et tout ce qu’on peut faire avec. Parce que là deployer une base sql juste pour faire un jeu tout con, sans utiliser aucune fonction « avancée » (même si les jointures c’est les bases) comme le dit unreal ça ne sert à rien.
[right][post=« 338632 »]<{POST_SNAPBACK}>[/post][/right][/quote]
ok j’vais lire alors :stuck_out_tongue:

Pff pas sympa google ce soir …
je continue mes recherches.

http://www.google.fr/search?&q=sql ? :stuck_out_tongue:

pas mal non plus :
http://www.commentcamarche.net/sql/sqljoint.php3

Sauf que pour la peine, c’est super laid de faire les jointures par des champs de texte, pas terrible l’exemple :/.

Enfin, ça a le mérite d’expliquer le concept, mais bon …

voici ma requete et sa fonction en prime.

[code]function verif($donnee) {

   $request = « SELECT rpg_sol.prix, rpg_sol.passable, rpg_towns.name, rpg_users.level  FROM rpg_users, rpg_towns, rpg_sol
               WHERE rpg_users.latitude = ‹ $latitude › AND rpg_users.longitude = ‹ $longitude › OR rpg_sol.latitude = ‹ $latitude ›
               AND rpg_sol.longitude = ‹ $longitude › OR rpg_towns.latitude = ‹ $latitude › AND rpg_towns.longitude = ‹ $longitude › »;
       $send = mysql_query($request);
       while($info = mysql_fetch_array($send)) {
               $prix = $info[’$prix’];
               $passable = $info[’$passable’];
               $lvl  = $info[’$level’];
               $name = $info[’$name’];

               if($prix>0) { Header(« Location: peage.php »); exit(); }
               if($passable == 0) { $donnee --; }
               if($name !=’’) { Header(« Location : combat.php »); exit(); }
               return true;
                                               }
                       }[/code]
donc j’ai un test de variable qui correspond a une variable retournée par le boutton :
comme ça en fait :stuck_out_tongue:

if (isset($_POST["north_x"])) { $latitude++; verif($_POST["north_x"]); if ($latitude > $controlrow["gamesize"]) { $latitude = $controlrow["gamesize"]; } } &nbsp; &nbsp;if (isset($_POST["south_x"])) { $latitude--; verif($_POST["south_x"]); if ($latitude < ($controlrow["gamesize"]*-1)) { $latitude = ($controlrow["gamesize"]*-1); } } &nbsp; &nbsp;if (isset($_POST["east_x"])) { $longitude++; verif($_POST["east_x"]); if ($longitude > $controlrow["gamesize"]) { $longitude = $controlrow["gamesize"]; } } &nbsp; &nbsp;if (isset($_POST["west_x"])) { $longitude--; verif($_POST["west_x"]); if ($longitude < ($controlrow["gamesize"]*-1)) { $longitude = ($controlrow["gamesize"]*-1); } }

et j’ai une erreur : « Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/banbanf/public_html/Royal_Vengence/explore.php on line 26 »

J’oubliai : cette page est incluse, donc la base est déjà ouverte : si j’essaye de la reouvrir erreur.

up please :P(

C’est quoi la question ? :stuck_out_tongue:

lol,
bien voyant le code quelques postes plus haut : y a t il une erreur majeu qui justifie des problemes pour mon applic, si oui lesquels, ou sinon : suggestions eventuelles pour le resoudre, sinon ben je fais du test table a table ( chiant :stuck_out_tongue: )

Déjà on saurait quelle est la ligne 26 ça aiderait. Sinon tu voudrait pas retourner potasser le sql et voir ce que c’est qu’une Natural Join ?

il n’y a qu’une ligne contenant un fetch_array :stuck_out_tongue:
je continue mes lectures, mais je trouve pas ça tip top non plus quoi
je vais faire autrement ça sera surement plus rapide

Bon, je crois qu’il y’a un truc que tu saisis pas fser. :stuck_out_tongue: Quand tu as un pb et que tu as besoin d’aide, il faut absolument que tu expliques clairement ce que tu veux faire avec des exemples concrets. Il n’est pas du tout utile de nous donner tous les details sur le projet ; on a pas non plus besoin de connaitre la couleur de ton slip, ni ce que tu as bouffe au petit dej. Ces choses la ne font que rendre tes posts bordeliques, illisibles et incomprehensibles.

Il est essentiel que tu expliques tes difficultes en dehors de son contexte original pour qu’une personne qui ne connait pas le projet en detail puisse suivre. Quand je lis tes topics, c’est systematiquement la meme chose :

1/ je lis et je capte absolument rien, comme s’il manquait la 1/2 des informations, tout en etant super agace par ton bla bla bla qui n’a rien a faire la
2/ quand tu postes enfin « la solution » je ne vois aucunement le rapport avec le probleme de depart. Quand on arrive meme pas a retrouver la problematique a partir de la « solution » c’est qu’il y’a clairement un soucis.

On veut bien t’aider, donc il faut que tu apprennes a etre concis, en adoptant une demarche scientifique. Le coup du « j’ai un warning a la ligne 26, aidez-moi ! » nous a bien fait rire sur irc, parce que tu dis nul part a quoi elle correspond cette ligne 26.

Aussi, le coup de citer des gros bouts de ton code est vraiment moyen parce que :

1/ ca fait sourire si jamais ton code n’est pas exemplaire (les sauts de ligne et les TAB c’est pas pour les chiens)
2/ c’est penible de lire du code. Surtout quand il manque des bouts et quand c’est pas son code.

Essaie donc de raisonner avec des phrases plutot que foutre des gros tas de code limite « demerdez vous ! ».

Ah ouais, j’ai failli oublier php.net et Google sont des outils formidables parce qu’ils te prendront pas pour un con quand tu leur poses une question basique.

Bonne chance ! :stuck_out_tongue:

c’est simplement que ta requete est du grand n’importe quoi.

tu veux sélectionner des éléments de trois tables qui n’ont aucun lien entre elles.

ce n’est donc pas une requete qu’il te faut, mais trois.
tu vérifies chacune des tables à son tour, puis en fonction des trois résultats tu autorises le déplacement ou pas.

alors certes, il existe des méthodes pour arriver à faire ça dans une seule requete. mais commence par faire du code propre avant d’essayer de faire du code optimisé.
surtout qu’ici on peut difficilement parler d’optimisation: la base de données est mal conçue dès le départ, sinon le probleme ne se serait jamais posé.
c’est pourquoi je ne dirai qu’une chose: faire ce genre de trucs en une seule requete, c’est systématiquement cradingue.

l’optimisation d’un sytème utilisant une base de données se fait lors de la conception de celle-ci, pas lors du développement.

Aie j’ai mal …
bon j’ai pu faire autrement, désolé pour mon manque de clarté ( maintenant si celebre :stuck_out_tongue: ).
désolé pour mes boulettes ( bon irc c’etait il y a un bail quand meme ( dit Fser comme pour s’innocenter )

Rabban, la requete nimporte kwa : je sais puisque je m’etais mal exprimé donc mal orienté.
bref désolé :stuck_out_tongue:
prochaine fois promis je fais mieux