JeuWeb - Crée ton jeu par navigateur
Probleme pour récupérer des infos dans plusieurs 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 : Probleme pour récupérer des infos dans plusieurs tables (/showthread.php?tid=1999)

Pages : 1 2


Probleme pour récupérer des infos dans plusieurs tables - Ogham - 10-11-2007

Bonjour,
voilà je bute sur un problème, surement une erreur de débutant mais j'y arrive pas alors voilà:
j'ai besoin de récupérer des infos dans plusieurs tables et de les mettre en relation
la premiere:
localisation
id
nom
x
y

la seconde
ressources
id
id_cite (qui correspond au id de la première table)
ressource

donc j'arrive sans problème a afficher le contenue des chacune de ces tables à l'aide d'une boucle while.
Par contre je voudrais pour chaque lieu afficher les ressources correspondantes et là ça bloque

j'ai essayé d'imbriquer la seconde boucle dans la première comme ça:
Code PHP :
<?php
require("connection_bd.php");
$retour=mysql_query( "SELECT * FROM localisation ");

while (
$donnees = mysql_fetch_array($retour))
{
$id=$donnees['id'];
$retour=mysql_query( "SELECT * FROM ressources WHERE id_cite=$id ");
echo
''.$donnees['nom'].'<br/>';
while (
$donnees = mysql_fetch_array($retour))
{
echo
''.$donnees['ressource'].'<br/>';
}
}
?>

ben ça marche pas, ça affiche la première entrée de la table et les ressources correspondantes mais c'est tout.
donc à force de tourner en rond je me dis que ça ne doit pas être la bonne méthode.
pourriez vous m'expliquer comment procéder pour arriver à faire ce que je veux s'il vous plait merci ?


RE: Probleme pour récupérer des infos dans plusieurs tables - Plume - 10-11-2007

Oulaaaa !!!! Tu vas te faire appeler Art... rraaaah m'énerve l'aut' à s'appeler comme ça !

Bref, tu vas te faire engueuler ! On ne met JAMAIS de requêtes dans une boucle, malheureux !!

J'te conseille de jeter un oeil aux jointures. Passe un peu de temps à potasser cette nouvelle chose, ça va t'être super utile !

Et pour info, c'est normal que ça ne marche pas.
On a d'abord : $retour=mysql_query( "SELECT * FROM localisation ");
Puis : $retour=mysql_query( "SELECT * FROM ressources WHERE id_cite=$id ");

Faudrait des noms de variables différents. Pareil pour $donnees.


RE: Probleme pour récupérer des infos dans plusieurs tables - Ogham - 10-11-2007

se fait tout petit ... savais bien que c'était pas correcte

Merci LexLxUs ,j'étais justement en train de fouiner de ce côté là (les jointures) mais j'avoue que je patauge un peu dans la semoule j'ai essayé plusieurs bouts de codes sans succés.

le problème c'est que j'ai besoin de récupérer la variable id de la première table pour trouver les infos correspondantes dans la seconde et ce pour chaque entrée de la table puisque je veux les afficher toutes donc il me faut une boucle .... euh je suis pas sur d'être très clair ...

je continue à chercher et si quelqu'un a quelque chose à suggérer pour m'aider je suis preneur.

repasse vous voir d'ici peu.
merci[/i]


RE: Probleme pour récupérer des infos dans plusieurs tables - Plume - 10-11-2007

J'ai bien compris ce que tu veux & j'confirme. La solution est les jointures.

Lex.


RE: Probleme pour récupérer des infos dans plusieurs tables - Sephi-Chan - 10-11-2007

Ce modeste tutoriel que j'ai fais il y a quelques temps pourra peut-être t'aider à comprendre les jointures par son exemple simple.

Tutorial : Les jointures avec MySQL


Sephi-Chan


RE: Probleme pour récupérer des infos dans plusieurs tables - Plume - 10-11-2007

Les tutos sur les jointures ne manquent franchement pas. Même pas besoin de se fatiguer dans de longues recherches.


RE: Probleme pour récupérer des infos dans plusieurs tables - Ogham - 10-11-2007

Bonjour,

Merci Sephi-Chan, j'y ai jeté un oeil attentif et je pense avoir compris le procédé.

Donc mon code actuel donne ça:
Code PHP :
<?php
require("connection_bd.php");
$retour=mysql_query( "SELECT localisation.id AS id_localisation,
localisation.nom,
localisation.x,
localisation.y,
ressources.id AS ressources_id,
ressources.ressource,
ressources.ref_cite
FROM ressources
INNER JOIN localisation
ON ressources.ref_cite = localisation.id"
);

while (
$donnees = mysql_fetch_array($retour))
{
echo
''.$donnees['nom'].'=> '.$donnees['ressource'].'<br/>';

}
?>

ce qui m'affiche
cité1 =>ressource1
cité2 =>ressource 2

cité2=>ressource1
cité2=>ressource2
cité2=>ressource3
etc

un léger mieux donc mais je ne sais pas comment faire pour afficher mes infos de cette manière:

cité1=>
ressource1
ressource2

cité2 =>
ressource1
resource2
ressource3.

Ces infos sont destinés à être affichées dans une infos bulle (en css et sans javascript) qui s'affiche sur ma carte au passage de la souris sur la cité.

Le code de l'info bulle ressemble à ça pour le moment:
Code PHP :
<?php
?>
<div class="calque2">
<!--la cité sur la carte!-->
<a href="#"class="info">
<IMG STYLE="position:absolute;z-index:2; TOP:<?php echo $y;?>px; LEFT:<?php echo $x;?>px; WIDTH:7px; HEIGHT:7px" SRC="images/carte/point_cite.gif"alt="image ville" />

<!--l'info bulle!-->
<span STYLE="position:absolute;height:px;text-align:center;top:<?php echo $y2;?>px;left:<?php echo $x2;?>px;">
<strong><?php echo $donnees['nom'];?></strong><br/>
<?php echo '('.$donnees['x'].'-'.$donnees['y'].')';?><br/>
<img style="height:px;width:px;"src="images/test2.jpg"/>
<p style="text-align:left;">
<strong>Ressources</strong><br/>
</p>
</span>
</a>
</div>
<?php

Pas très propre donc, mais ce n'est qu'un test.
des suggestions pour ce problème de présentation ?


RE: Probleme pour récupérer des infos dans plusieurs tables - Sephi-Chan - 10-11-2007

Oui, c'est la difficulté dans l'utilisation des jointures : n'afficher que ce que tu veux.

Pour cela, tu dois utiliser une technique que voici :
Code PHP :
<?php 
$elementActuel
;
while (
$donnees = mysql_fetch_assoc($retour)){
/* Je te conseille d'utiliser mysql_fetch_assoc() au lieu de mysql_fetch_array(), qui ne t'apporte rien de plus. */
if($donnees['nom'] != $elementActuel){
$elementActuel = $donnees['nom'];
echo
$donnees['nom'].' :';
}
echo
$donnees['ressource'].'<br/>';

}

Voici ce que donnera la boucle :

Si le nom que l'on parcours actuellement est différent du nom d'élément actuel (initialement une valeur nulle) : on lui donne cette valeur. Cela a lieu quand on passe de Null à Cité 1, puis de Cité 1 à Cité 2.

Dans tous les cas, on affiche le nom de la ressource.

C'est un poil plus compliqué si tu génères une liste, car il faut prévoir l'ouverture de la liste et sa fermeture.


Sephi-Chan


RE:[REGLE] Probleme pour récupérer des infos dans plusieurs tables - Ogham - 10-11-2007

Merci beaucoup pour ton aide Sephi-Chan, je devrais maintenant arriver à faire ce que je veux avec ça.

Et je repasserais me présenter plus longuement d'ici peu, il est bien utile et agréable ce forum Smile


RE: Probleme pour récupérer des infos dans plusieurs tables - Ogham - 10-11-2007

Excusez moi pour pour le flood mais ...

"Votre problème est réglé ?
N'oubliez pas d'ajouter le TAG [Réglé] au début de votre « Titre du message » !"

Comment faire ça je ne trouve pas ??