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 :

Requête SELECT avec plusieurs INNER JOIN


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut Requête SELECT avec plusieurs INNER JOIN
    Bonjour,

    Est-il possible de faire une requête avec plusieur INNER JOIN ?

    Je m'explique : j'ai trois tables, dateloca avec la clé "idperiode" et la clé "idnoms" de la table locataires qui elle a la clé "idnoms" et la clé "idcivil" de la table civilites.

    Avant que je me casse la tête pour rien, je voudrais juste savoir si c'est possible pour pas.

    Merci d'avance pour vos réponses

  2. #2
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    Bonjour,

    Oui bien sûr c'est possible

  3. #3
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593

  4. #4
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Merci pour l'exemple, voici mon essai :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    <?php
    // On inclut la connexion à la base
    include('include/db_inc_pdo.php');
    $idnoms = isset($_POST['truc']) ? $_POST['truc'] : '';
    $idnoms = $_POST['truc'];
    // On écrit notre requête
     
     
     
    $sql = "SELECT a.datearrive, a.datedepart, a.nombre, a.prixlocation, a.caution, a.linge, a.litbaby,a.remarques, a.restitution, a.datelettre, a.paragraphesup l.nom, l.noma. l.prenom, l.rue, l.ruea, l.cp, l.ville, l.pays, c.civil, c.civillong
    FROM dateloca a, locataires l, civilites c
    WHERE a.idnoms = l.idnoms 
    AND l.idcivil = c.idcivil";
     
     
    // On prépare la requête
    $query = $pdo->prepare($sql);
     
    // On exécute la requête
    $query->execute();
     
    // On stocke le résultat dans un tableau associatif
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
     
    ?>
     
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
     
    <style>
    div {
    	padding-top: 50px;	
      padding-left: 500px;
     
    }
    </style>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
     
    <script>
    <!--
    function doit(){
    if (!window.print){
    alert("You need NS4.x to use this print button!")
    return
    }
    window.print()
    }
    //-->
    </script>
     
    <a href="javascript:doit()"><img src="print.gif" border=0></a>
     
     
    </head>
    <body>
     
        <table>
     
            <tbody>
    <?php
    		foreach($result as $adloc){
    ?>
     
    <tr>
     
    	<div>      
    		<p><?= $adloc['civil'] ?>&nbsp;&nbsp;<?= $adloc['prenom'] ?>&nbsp;&nbsp;<?= $adloc['nom'] ?>&nbsp;&nbsp;<?= $adloc['noma'] ?>
    		</p>					
    		<p><?= $adloc['rue'] ?>
    		</p>
    		<p><?= $adloc['cp'] ?>&nbsp;&nbsp;<?= $adloc['ville'] ?>
    		</p>
    		<p><?= $adloc['pays'] ?>
    		</p>
    	</div>		
     
     
    		<p>
    		<?= $adloc['civillong'] ?>
    		</p> 
     
    </tr>
     
     
     
    <?php
            }
    ?>
            </tbody>
        </table>
     
    </body>
    </html>
    Voici le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '.nom, l.noma. l.prenom, l.rue, l.ruea, l.cp, l.ville, l.pays, c.civil, c.civillo' à la ligne 1 in C:\wamp64\www\chaletgestion\adresse_loc.php on line 20
    ( ! ) PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '.nom, l.noma. l.prenom, l.rue, l.ruea, l.cp, l.ville, l.pays, c.civil, c.civillo' à la ligne 1 in C:\wamp64\www\chaletgestion\adresse_loc.php on line 20
    J'ai un autre problème dans le formulaire qui envoie l'idnoms choisi :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    include("menu.php");
    ?>
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
    <?php
    include("include/db_inc_pdo.php");
     
     
    //creation de la requete et excécution de la requete
    //**************************************
    $reponse = $pdo->query("SELECT * FROM dateloca 
    INNER JOIN  locataires on dateloca.idnoms = locataires.idnoms 
    INNER JOIN civilites on locataires.idcivil = civilites.idcivil 
    
    ORDER BY datearrive desc
    ");
     
    $row = $reponse->fetch();
     
    ?>
     
    </head>
     
    <body>
    <form action="adresse_loc.php" method="POST">
    <p>Choisissez un nom :</p> <select name="truc">
    <?php
     
    {
     
    while ($row = $reponse->fetch())
     
        echo '<option value="'.$row['idnoms'].'">'.$row['datearrive']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['nom']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['noma']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['prenom'].'</option>';
        }
    ?>
    </select>
    <input type="submit" value="Voir les infos"  />
    </form>
    </body>
    </html>
    Il fonctionne mais ne me renvoie pas les bonnes infos

    J'ai fait à peu près la même chose mais en joignant 2 tables et là cela fonctionne parfaitement.

    Le formulaire pour choisir :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php error_reporting ( E_ALL ); ?>
    <?php
    include("menu.php");
    ?>
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
    <?php
    include("include/db_inc_pdo.php");
     
     
    //creation de la requete et excécution de la requete
    //**************************************
    $reponse = $pdo->query("SELECT * FROM locataires 
    
    ORDER BY nom");
     
    //$reponse->execute([$reserve]);
    //$user = $reponse->fetch();
    $row = $reponse->fetch();
     
    ?>
     
     
    </head>
     
    <body>
    <form action="adresse.php" method="POST">
    <p>Choisissez un nom :</p> <select name="truc">
    <?php
     
    {
     
    while ($row = $reponse->fetch())
     
        echo '<option value="'.$row['idnoms'].'">'.$row['nom']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['noma']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['prenom'].'</option>';
        }
    ?>
    </select>
    <input type="submit" value="Voir les infos"  />
    </form>
    </body>
    </html>

    Le formulaire que reçoit les données :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <?php
    // On inclut la connexion à la base
    include('include/db_inc_pdo.php');
    $id = isset($_POST['truc']) ? $_POST['truc'] : '';
    $id = $_POST['truc'];
    // On écrit notre requête
    $sql = "SELECT * FROM `locataires` INNER JOIN civilites on locataires.idcivil = civilites.idcivil WHERE idnoms = '" . $id . "'";
     
    // On prépare la requête
    $query = $pdo->prepare($sql);
     
    // On exécute la requête
    $query->execute();
     
    // On stocke le résultat dans un tableau associatif
    $result = $query->fetchAll(PDO::FETCH_ASSOC);
     
    ?>
     
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
     
    <style>
    div {
    	padding-top: 50px;	
      padding-left: 500px;
     
    }
    </style>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
     
    	<script>
    <!--
    function doit(){
    if (!window.print){
    alert("You need NS4.x to use this print button!")
    return
    }
    window.print()
    }
    //-->
    </script>
     
    <a href="javascript:doit()"><img src="print.gif" border=0></a>
     
     
    </head>
    <body>
     
        <h1></h1>
        <table>
     
            <tbody>
            <?php
                foreach($result as $adloc){
            ?>
     
     
     
     
     <tr>
     
                   <div>
    					<p>
    					<?= $adloc['civil'] ?>&nbsp;&nbsp;<?= $adloc['prenom'] ?>&nbsp;&nbsp;<?= $adloc['nom'] ?>&nbsp;&nbsp;<?= $adloc['noma'] ?>
    					</p>					
                        <p>
    					<?= $adloc['rue'] ?>
    					</p>
    					<p>
    					<?= $adloc['cp'] ?>&nbsp;<?= $adloc['ville'] ?>
    					</p>
                        <p>
    					<?= $adloc['pays'] ?>
    					</p>
    				</div>		
     <p>
    					<?= $adloc['civillong'] ?></p>
    </tr>
     
    <?php
          }
    ?>
            </tbody>
        </table>
     
    </body>
    </html>
    Ces deux-là pas de problème cela fonctionne parfaitement, je les ai mis juste pour info.

    Ce que je voudrais faire, c'est sélectionner une ligne dans la liste déroulante d'un formulaire comprenant deux tables jointes et afficher les données sélectionnées dans un formulaire comprenant 3 tables jointes.

    D'avance merci pour votre aide

  5. #5
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2020
    Messages : 35
    Par défaut
    Salut,
    Compare simplement le SQL de ton premier bout de code avec les requêtes qui fonctionnent.
    Tu verras que tu as oublié quelque chose (tu veux faire une requête avec plusieurs INNER JOIN mais ta requête n'en contient pas) et que tu peux enlever le WHERE.

  6. #6
    Membre confirmé
    Femme Profil pro
    piano
    Inscrit en
    Décembre 2011
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : piano
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Décembre 2011
    Messages : 131
    Par défaut
    Merci, entretemps je me suis rendue compte de mes erreurs et maintenant cela fonctionne, mais j'ai un problème avec le formulaire qui me permet de sélectionner les données, il ne m'affiche pas le dernier enregistrement, est-ce dû à la date qui se trouve dans le futur ?

    Voici ce formulaire :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php error_reporting ( E_ALL ); ?>
    <?php
    include("menu.php");
    ?>
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
    <?php
    include("include/db_inc_pdo.php");
     
     
    //creation de la requete et excécution de la requete
    //**************************************
    $reponse = $pdo->query("SELECT * FROM dateloca 
    INNER JOIN  locataires on dateloca.idnoms = locataires.idnoms 
    
    
    ORDER BY datearrive desc
    ");
     
    $row = $reponse->fetch();
     
    ?>
     
    </head>
     
    <body>
    <form action="adresse_loc.php" method="POST">
    <p>Choisissez un nom :</p> <select name="adloc">
    <?php
     
    {
     
    while ($row = $reponse->fetch())
     
        echo '<option value="'.$row['idperiode'].'">'.$row['datearrive']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['nom']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['noma']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['prenom'].'</option>';
        }
    ?>
    </select>
    <input type="submit" value="Voir les infos"  />
    </form>
    </body>
    </html>
    D'avance merci pour votre aide.

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

Discussions similaires

  1. Select avec des inner join
    Par zerros dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/05/2017, 14h08
  2. Requête SELECT Avec plusieurs WHERE
    Par jazzybluesy dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/10/2012, 10h56
  3. [WD12] Erreur dans une Requête avec plusieurs INNER JOIN
    Par Raphael1980 dans le forum WinDev
    Réponses: 3
    Dernier message: 12/06/2009, 15h22
  4. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 17h55
  5. requête sql avec clause INNER JOIN
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/08/2005, 15h47

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