Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/01/2010, 12h38   #1
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Par défaut Jointure entre deux tables

Bonjour à tous,

A la suite d'un problème résolu, un petit problème vient d'apparaitre pour faire simple voilà quelques explications.

J'ai deux tables :
type_logement
-id_logement
-type_logement (chambre,studio,appartement,maison...)

offres
-id
-id_logement
-nom
-prénom
-rue...

Le problème est que en voulant faire simple j'ai créer un formulaire pour créer une nouvelle offre ou modifier une offre cependant la liste déroulante elle ne copie dans la table offre que l'id_logement et non pas le type_logement.

Les offres ressemblent alors à : vous avez choisi un 2, son loyer est de...
Le problème c'est que à la place du 2 qui est l'id correpondant à appartement j'aurais aimer avoir, vous avez choisi un appartement...

Le code affichant un résumé du contenu de la table est :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo stripslashes($donnees['type']); ?></td>
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
Ici ce serait le champ type qu'il faudrait aller chercher dans une autre table.

Merci d'avance pour votre aide et j'espère avoir étais assez claire
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 14h03   #2
Membre Expert
 
Avatar de nosferapti
 
Inscription : avril 2009
Messages : 1 157
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 1 157
Points : 1 133
Points : 1 133
essaye ce genre de requête :
Code SQL :
1
2
3
4
5
SELECT *
FROM base_logement AS BL
INNER JOIN type_logement AS TL
    TL.id_type_logement = BL.id_type_logement
ORDER BY BL.id_logement DESC
__________________
GNAP !
nosferapti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 14h04   #3
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Bonjour,

pourquoi ne pas créer un tableau php de correspondance ?

Code :
1
2
 
$tab_corr = array(1=>"chambre", 2=>"studio", 3=>"appartement", 4=>"maison");
puis attaquer ce tableau avec l'id pour récupérer le type de logement ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 16h33   #4
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Merci Madfrix et nosferapti !

C'est vrai que la solution d nosferapti est plus dans l'esprit de ce que je penser faire mais ta solution Madfrix est aussi intéressante bien que si il me fallait ajouter des types de logements il serait préférable de juste devoir modifier la table je pense.

j'ai donc essayé, pour le moment sans succès je ne suis pas vraiment sur j'ai donc tester cela :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<?
$retour2= mysql_query('SELECT * 
FROM base_logement AS BL
INNER JOIN type_logement AS TL 
    TL.id_logement = BL.id');
?>
<td><?php echo stripslashes($retour2['type_logement']); ?></td> <!-- type_logement est ici le contenu chambres,studio... -->
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
Il doit y avoir une erreur, je ne pense pas à devoir faire une boucle car il ne doit sortir de cette requête qu'une seule et unique réponse normalement...

Merci encore pour votre aide ^^
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 16h54   #5
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Re

il manque déjà un ON dans ta requete avant TL.id_logement je pense
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 19h42   #6
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Merci Madfrix,

J'ai corrigé mais j'ai un doute dans ce que je dois écrire pour l'echo...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les offres
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<?
$retour2= mysql_query('SELECT * 
FROM base_logement AS BL
INNER JOIN type_logement AS TL 
   ON TL.id_logement = BL.id_logement');
$type_logement = $retour2['type_logement'];
?>
<td><?php echo stripslashes($type_logement); ?></td> 
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 19h46   #7
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Quelque chose comme cela ?

Code php :
1
2
3
4
 
 
while($ligne = mysql_fetch_assoc($retour2))
     $type_logement = $ligne['type_logement'];
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2010, 20h12   #8
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Merci Madfrix,

J'ai essayé ce que tu me proposé mais malheureusement il ne prend que le dernier champ de la table type_logement qui est studio et il affiche cela à chaque endroit même si c'est un appartement ou une maison, je me suis dit qu'il faudrait peut être mettre un test et afficher mais c'est encore pire voilà ce que j'ai fait :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
<?php
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les offres
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<?
$retour2= mysql_query('SELECT type_logement FROM base_logement AS BL INNER JOIN type_logement AS TL ON TL.id_logement = BL.id_logement');
while($ligne = mysql_fetch_assoc($retour2))
{
$type_logement = $ligne['type_logement'];
if ($type_logement==$id_logement)?><td><? echo stripslashes($type_logement); ?></td><?
}
?>
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 00h45   #9
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
J'abandonne Madfrix,

J'opte pour ta solution beaucoup plus simple peut être à mettre en place enfin c'est ce que je pensais au départ mais l'idéal connaissant le numéro du tableau il faudrait venir chercher l'élément correspondant alors je proposerais bien ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
$tab = array(1=>"Appartement", 2=>"Chambre", 3=>"Maison", 4=>"Gite", 5=>"studio");
 
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les offres
{
?>
<tr align="center">
<td><?php echo '<a href="rediger_offre.php?modifier_offre=' . $donnees['id'] . '">'; ?>Modifier</a></td>
<td><?php echo '<a href="liste_offre.php?supprimer_offre=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
<td><?php echo tab['id_logement'+1]?></td>
<td><?php echo stripslashes($donnees['meuble']);?></td>
<td><?php echo stripslashes($donnees['loyer']);?></td>
<td><?php echo stripslashes($donnees['distance']);?></td>
<td><?php echo stripslashes($donnees['superficie']);?></td>
<td><?php echo stripslashes($donnees['prenom_proprio']);?></td>
<td><?php echo stripslashes($donnees['nom_proprio']);?></td>
<td><?php echo stripslashes($donnees['rue']);?></td>
<td><?php echo stripslashes($donnees['code_postal']);?></td>
<td><?php echo stripslashes($donnees['ville']);?></td>
</tr>
Déjà un petit soucis vu que le tableau commence à 0 je suis pas sur de pouvoir faire ce que j'ai fait ?
Et si de cette façon je peut récupérer le descriptif ?

Merci d'avance
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 00h55   #10
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Pas de soucis pour les indices, c'est un tableau associatif

Par contre, remplace ça :

Code php :
1
2
 
<td><?php echo tab['id_logement'+1]?></td>

par ça :

Code php :
1
2
 
<td><?php echo $tab[$id_logement];></td>

D'où récupères tu ton $id_logement ?
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 11h05   #11
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Merci Madfrix,

Mon id_logement je le récupère pas en faisant ça :

Code :
1
2
3
 
$retour = mysql_query('SELECT * FROM base_logement ORDER BY id DESC');
while ($donnees = mysql_fetch_array($retour))
L'id_logement est dans la base_logement normalement est en faisant ça je récupère dans le tableau normalement toute les données de chaque ligne. Enfin je pense ^^

Par contre il n'est pas très content il ne m'affiche rien mais si j'écrit :

Code :
1
2
 
<td><?php echo stripslashes($tab['id_logement']);?></td>
j'obtient bien mes chiffres donc il ne doit pas rester grand choses pour se servir du chiffre afin d'afficher l'élément du tableau correspondant
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 11h16   #12
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
C'est normal, tu as pas d'indice 'id_logement' dans ton tableau $tab, seulement des 1, 2, 3, 4, 5. Il faut que tu mettes un $ devant id_logement et remplace :

Code php :
1
2
 
while ($donnees = mysql_fetch_array($retour))

par :

Code php :
1
2
 
while ($donnees = mysql_fetch_assoc($retour))

Beaucoup plus confortable notamment si tu rajoutes ou enlèves des champs dans ta table

mysql_fetch_array ne fonctionne qu'avec des indices numériques pas alpha je pense toutes tes erreurs poviennent déjà de là


EDIT:

En fait non cela doit marcher mais mysql_fetch_assoc est plus clean
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 11h32   #13
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
J'ai essayé de remplacer par un $ mais j'obtient une ligne blanche je ne le place peut être pas au bon endroit...

Code :
1
2
 
<td><?php echo stripslashes($tab['$id_logement']);?></td>
et je me suis trompé c'est en écrivant cela que j'arrive à récupèrer l'id_logement de chaque offre :

Code :
1
2
 
<td><?php echo stripslashes($donnees['id_logement']);?></td>
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 11h39   #14
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Il faut que tu mettes des double quotes au lieu des simples quotes.

Ex:

Code php :
1
2
3
4
5
6
 
$a = 'coucou';
 
echo $a; -> coucou
echo '$a'; -> $a
echo "$a"; -> coucou

les doubles quotes interprétent les variables, les simples quotes non
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 11h51   #15
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Merci pour cet éclaircissement ^^

Donc je test :

Code :
1
2
 
<td><?php echo $tab["$id_logement"];?></td>
qu'est ce qui pourrait ne pas aller cette fois ci ? Arf on va y arriver
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 11h52   #16
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Fais un :

Code php :
1
2
 
echo $id_logement;

pour voir s'il te retourne bien un chiffre
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 12h08   #17
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
en effectuant un je n'arrive pas à récupérer un chiffre.

Je ne le récupère bien qu'en effectuant un :

Code :
1
2
 
<td><?php echo stripslashes($donnees['id_logement']);?></td>
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 12h24   #18
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 247
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 247
Points : 2 291
Points : 2 291
Ok, c'est parce que tu le récupères de ton tableau associatif et que tu ne l'as pas affecté à une variable. Soit tu fais :


Code php :
1
2
3
4
5
6
7
8
 
while ($donnees = mysql_fetch_assoc($retour)){
...
$id_logement = $donnees['id_logement'];
...
}
 
echo $tab[$id_logement];

ou alors

Code php :
1
2
 
echo $tab[$donnees['id_logement']];
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2010, 17h35   #19
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 126
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 126
Points : 36
Points : 36
Problème résolut merci Madfrix mais du coup un nouveau problème beaucoup plus important vient d'apparaître ! Les joies de l'informatique... ^^
masterix59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 19h49.


 
 
 
 
Partenaires

Hébergement Web