IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Jointure entre deux tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    essaye ce genre de requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ^^

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Re

    il manque déjà un ON dans ta requete avant TL.id_logement je pense

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    Merci Madfrix,

    J'ai corrigé mais j'ai un doute dans ce que je dois écrire pour l'echo...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Quelque chose comme cela ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    while($ligne = mysql_fetch_assoc($retour2))
         $type_logement = $ligne['type_logement'];

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  10. #10
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Pas de soucis pour les indices, c'est un tableau associatif

    Par contre, remplace ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><?php echo tab['id_logement'+1]?></td>

    par ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><?php echo $tab[$id_logement];></td>

    D'où récupères tu ton $id_logement ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    Merci Madfrix,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  12. #12
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    while ($donnees = mysql_fetch_array($retour))

    par :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    J'ai essayé de remplacer par un $ mais j'obtient une ligne blanche je ne le place peut être pas au bon endroit...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><?php echo stripslashes($donnees['id_logement']);?></td>

  14. #14
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Il faut que tu mettes des double quotes au lieu des simples quotes.

    Ex:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    Merci pour cet éclaircissement ^^

    Donc je test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Fais un :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $id_logement;

    pour voir s'il te retourne bien un chiffre

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    en effectuant un je n'arrive pas à récupérer un chiffre.

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td><?php echo stripslashes($donnees['id_logement']);?></td>

  18. #18
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $tab[$donnees['id_logement']];

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 126
    Par défaut
    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... ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jointure entre deux tables ?
    Par spirit69 dans le forum Access
    Réponses: 2
    Dernier message: 05/12/2006, 20h21
  2. jointure entre deux tables mysql
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 23/04/2006, 20h08
  3. [MySQL] Jointure entre deux tables
    Par Flushovsky dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 03/10/2005, 18h55
  4. PROBLEME DE JOINTURE ENTRE DEUX TABLE
    Par DarkMax dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/01/2005, 15h11
  5. Jointure entre deux tables et résultat
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2004, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo