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 :

Requete MySQL dans plusieurs tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut Requete MySQL dans plusieurs tables
    Bonjour,

    Voici un nouveau défis pour les plus fort d'entre vous ...

    Je bosse sur un petit site pour ma société qui liste toutes les documentations fournisseurs que l'on peut avoir ...

    J'ai la possibilité de créer des listes suivant la société, le numéro de pochette dans laquelle la doc est rangé .... etc ...

    J'ai donc ma base de données sous phpmyadmin qui comprend trois tables, tablecontact, tableproduit et tablesociete ...

    J'ai voulu ajouter une colonne à une de mes pages (il y en aura trois au total) qui me permettrait en plus des infos déjà présentes de voir apparaître le FOURNISSEUR du matériel que je cherche ...

    Voici le bout de code en PHP:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php require_once('../Connections/ConnexionBiblio.php'); ?>
    <?php
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsChemise = "SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitType, tableproduit.ProduitDate, tableSociete.SocieteNom FROM tableproduit LEFT JOIN tablesociete ON tableproduit.ProduitMarque = tablesociete.RefSociete ORDER BY tablesociete.SocieteNom, tableproduit.ProduitType";
    $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error());
    $row_rsChemise = mysql_fetch_assoc($rsChemise);
    $totalRows_rsChemise = mysql_num_rows($rsChemise);
    ?>
    J'aimerais savoir comment je peux ajouter ma colonne sachant que les fournisseurs sont listés dans une autre table ????

    Dois-je faire deux connexions à ma base dans deux tables différentes ou est-ce que je peux lui dire d'aller tout chercher dans une seule requête ????

    Merci de votre aide ...

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 573
    Par défaut
    montre la structure des tes tables et 2 ou 3 exemples d'enregistrement pour chaque table
    ensuite montre nous ce que tu veux obtenir à partir de données d'exemple

  3. #3
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Il faut que tu fasses une jointure entre ta table des fournisseurs et une de tes tables utilisées dans ta requete. Par exemple si ta tableproduit contient une colonne idFournisseur, tu ajoutes
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN tablefournisseur ON tableproduit.idFournisseur= tablefournisseur.idFournisseur

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    Voici quelques captures d'écrans ...

    La ligne que je voudrais rajouter est celle-ci :

    TABLEPRODUIT.SOCIETENOM

    Merci de votre aide

    Code de la page entière:

    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
     
    <?php require_once('../Connections/ConnexionBiblio.php'); ?>
    <?php
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsChemise = "SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitType, tableproduit.ProduitDate, tableSociete.SocieteNom FROM tableproduit LEFT JOIN tablesociete ON tableproduit.ProduitMarque = tablesociete.RefSociete ORDER BY tablesociete.SocieteNom, tableproduit.ProduitType";
    $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error());
    $row_rsChemise = mysql_fetch_assoc($rsChemise);
    $totalRows_rsChemise = mysql_num_rows($rsChemise);
    ?>
     
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html><!-- InstanceBegin template="/Templates/ListeBiblio.dwt" codeOutsideHTMLIsLocked="false" -->
    <head>
    <!-- InstanceBeginEditable name="doctitle" -->
    <title>Listes</title>
    <!-- InstanceEndEditable -->
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <!-- InstanceBeginEditable name="head" -->
    <!-- InstanceEndEditable -->
    </head>
     
    <body bgcolor="#F2F2F2">
    <div align="center"></div>
    <table width="800" height="452">
      <tr>
        <td width="542" height="35"><strong><font face="Arial, Helvetica, sans-serif">BIBLIO
        CMF</font></strong> </td>
        <td width="246">&nbsp;</td>
      </tr>
      <tr>
        <td height="51" colspan="2"><div align="center"><font size="6" face="Arial, Helvetica, sans-serif"><strong><!-- InstanceBeginEditable name="TITRE" -->CHEMISES
                  de documentation<!-- InstanceEndEditable --></strong></font></div></td>
      </tr>
      <tr>
        <td colspan="2" valign="top"><div align="center">
          <!-- InstanceBeginEditable name="tableau" -->
          <table width="100%" border="1" cellpadding="1" bordercolor="#336633" bgcolor="#FFFFCC">
            <tr>
              <td width="40"><div align="center"><strong><font size="2" face="Arial, Helvetica, sans-serif">Chemise
                N&deg;</font></strong></div></td>
              <td width="200"><div align="center"><strong><font size="2" face="Arial, Helvetica, sans-serif">Soci&eacute;t&eacute;&nbsp;&nbsp;</font></strong></div></td>
              <td><div align="center"><strong><font size="2" face="Arial, Helvetica, sans-serif">Type
                      de produit</font></strong></div></td>
              <td width="60"><div align="center"><strong><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;Date</font></strong></div></td>
              <td width="60"><div align="center"><strong><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;Fournisseurs</font></strong></div></td>
            </tr>
            <?php do { ?>
            <tr valign="middle">
                <td nowrap> <div align="center"><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsChemise['ProduitNumChemise']; ?></font> </div></td>
                <td><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsChemise['SocieteNom']; ?></font></td>
                <td><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsChemise['ProduitType']; ?></font></td>
                <td nowrap><font size="2" face="Arial, Helvetica, sans-serif">&nbsp;<?php echo $row_rsChemise['ProduitDate']; ?></font></td>
                <td nowrap><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $row_rsDetailFournisseur['SocieteNom']; ?></font></td>
            </tr>
            <?php } while ($row_rsChemise = mysql_fetch_assoc($rsChemise)); ?>
          </table>
          <p>&nbsp;</p>
          <p>&nbsp;</p>
          <!-- InstanceEndEditable -->
          <p>&nbsp;</p>
          <p>&nbsp;</p>
        </div></td>
      </tr>
    </table>
    <p align="center"><strong><font size="7" face="Arial, Helvetica, sans-serif"></font></strong></p>
    </body>
    <!-- InstanceEnd --></html>
    <?php
    mysql_free_result($rsChemise);
    ?>
    Images attachées Images attachées    

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    J'ai essayé de faire une nouvelle connexion à la base pour lancer une nouvelle requête ......

    Par contre maintenant ça marche mais pas entièrement ...

    Il m'affiche mes résultats dans ma colonne mais il m'affiche toujours le même fournisseur .. le premier qu'il trouve dans la BDD ...

    Auriez-vous une idée ???

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    J'ai essayé plusieurs scripts mais je n'arrive tjs pas à trouver le bon ...

    Je commence à déséspérer ....

    Personne pour m'aider ???

    Voici le script qui m'affiche toujours le même résultat à chaque ligne ...

    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
     
    <?php
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsChemise = "SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitType, tableproduit.ProduitDate, tableSociete.SocieteNom FROM tableproduit LEFT JOIN tablesociete ON tableproduit.ProduitMarque = tablesociete.RefSociete ORDER BY tablesociete.SocieteNom, tableproduit.ProduitType";
    $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error());
    $row_rsChemise = mysql_fetch_assoc($rsChemise);
    $totalRows_rsChemise = mysql_num_rows($rsChemise);
     
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsDetailFournisseur = sprintf("SELECT tablesociete.SocieteNom FROM tablesociete WHERE tablesociete.SocieteNom", $colProduit_rsDetailFournisseur);
    $rsDetailFournisseur = mysql_query($query_rsDetailFournisseur, $ConnexionBiblio) or die(mysql_error());
    $row_rsDetailFournisseur = mysql_fetch_assoc($rsDetailFournisseur);
    $totalRows_rsDetailFournisseur = mysql_num_rows($rsDetailFournisseur);
     
    ?>
    Si ça peut vous aider

    ----------------

    Je viens d'essayer ce bout de code mais ça marche pas mieux :

    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
     
    <?php
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsChemise = "SELECT tableproduit.ProduitNumChemise, tableproduit.ProduitType, tableproduit.ProduitDate, tableSociete.SocieteNom FROM tableproduit LEFT JOIN tablesociete ON tableproduit.ProduitMarque = tablesociete.RefSociete ORDER BY tablesociete.SocieteNom, tableproduit.ProduitType";
    $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error());
    $row_rsChemise = mysql_fetch_assoc($rsChemise);
    $totalRows_rsChemise = mysql_num_rows($rsChemise);
     
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsDetailFournisseur = "SELECT tablesociete.SocieteNom FROM tablesociete WHERE tablesociete.SocieteNom";
    $rsChemise = mysql_query($query_rsChemise, $ConnexionBiblio) or die(mysql_error());
    $row_rsChemise = mysql_fetch_assoc($rsChemise);
    $totalRows_rsChemise = mysql_num_rows($rsChemise);
     
    ?>
    Et ça c'est ma case dans le tableau dans lequel je veux que le resultat s'affiche ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td nowrap><font size="2" face="Arial, Helvetica, sans-serif"><?php echo $row_rsChemise['SocieteNom']; ?></font></td>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    Codé comme ça sa m'affiche mes résultats par contre ça m'affiche le même resultats dans ma colonne SOCIETE que FOURNISSEUR alors que c'est pas la même chose que je veux ...

    N° chemise ! Société ! Type de produit ! Date ! Fournisseurs
    ----------------------------------------------------------
    1004 ! ACME ! Charniere______! 2004 ! ACME
    1005 ! ACME ! Motoreducteur _! 2005 ! ACME
    1006 ! ACME ! Roulement_____! 2006 ! ACME


    Ce que je voudrais ce serait plutôt ça :

    N° chemise ! Société ! Type de produit ! Date ! Fournisseurs
    ----------------------------------------------------------
    1004 ! ACME ! Charniere______! 2004 ! NORELEM
    1005 ! ACME ! Motoreducteur_.! 2005 ! LEROY SOMER
    1006 ! ACME ! Roulement_____! 2006 ! INA

    Ce n'est qu'un exemple ...

    Voir la miniature pour mieux comprendre ...

    C'est la dernière colonne qui déconne ...
    Images attachées Images attachées  

  8. #8
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 573
    Par défaut
    pour afficher 2 champs qui ont le même nom tu peux utiliser "AS" pour mettre des alias comme ça par exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT M.SocieteNom AS nomMarque, F.SocieteNom AS nomFournisseur, P.*
    FROM tableproduit AS P
    INNER JOIN tablesociete AS M
        ON M.RefSociete = P.ProduitMarque
    INNER JOIN tablesociete AS F
        ON F.RefSociete = P.ProduitFournisseur

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    J'ai du mal à tout saisir là ...

    Je vois pas trop comment l'adapter pour ma BDD ....

    Pourrais-tu regarder ça s'il te plaît ???

    Je vais essayer et je te met le code que j'ai trouvé ...

    D'avance merci

    -----------------------

    J'ai essayé ce bout de code mais là je suis complètement perdu ....

    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
     
    <?php
    mysql_select_db($database_ConnexionBiblio, $ConnexionBiblio);
    $query_rsDetailFournisseur = "SELECT tableproduit.ProduitNumChemise,
    tableproduit.ProduitType, tableproduit.ProduitDate,
    tableSociete.SocieteNom FROM tableproduit
    AS tableproduit INNER JOIN tablesociete
    AS tableproduit ON RefSociete = ProduitMarque
    INNER JOIN tablesociete AS DetailFournisseur
    ON RefSociete = RefProduit";
    $rsDetailFournisseur = mysql_query($query_rsDetailFournisseur, $ConnexionBiblio) or die(mysql_error());
    $row_rsDetailFournisseur = mysql_fetch_assoc($rsDetailFournisseur);
    $totalRows_rsDetailFournisseur = mysql_num_rows($rsDetailFournisseur);
     
    ?>
    Et là il me retourne l'erreur suivante ....

    Not unique table/alias: 'tableproduit'

  10. #10
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 573
    Par défaut
    Citation Envoyé par Luverger Voir le message
    Je vois pas trop comment l'adapter pour ma BDD ....
    j'ai déjà utilisé les noms de tes tables et de tes champs
    colle la requête dans phpMyAdmin et regarde le résultat

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    En gros ça doit donner ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $query_rsDetailFournisseur = "SELECT M.SocieteNom AS nomMarque, F.SocieteNom AS nomFournisseur, P.*
    FROM tableproduit AS P
    INNER JOIN tablesociete AS M
        ON M.RefSociete = P.ProduitMarque
    INNER JOIN tablesociete AS F
        ON F.RefSociete = P.ProduitFournisseur";
    A quoi correspondent les P et M ??? et le P.* ????

    Merci d'avance

  12. #12
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    Salut, les M, P sont des alias pour simplifier l'écriture de la requête et identifier l'appartenance des champs (surtout utile lorsque des tables différentes possèdent des champs ayant le même nom).

    Peut-être qu'un peu de lecture sur la syntaxe MySQL te serait bénéfique et t'aiderait à mieux cerner le problème de manière générale :
    http://dev.mysql.com/doc/refman/5.0/fr/index.html

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 89
    Par défaut
    Merci pour le lien ...

    Je vais aller voir

    Bye

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  2. Réponses: 7
    Dernier message: 17/03/2007, 13h52
  3. [MySQL] Problème requete SQL sur plusieurs tables
    Par Tiib_CD dans le forum Langage SQL
    Réponses: 30
    Dernier message: 21/12/2006, 16h52
  4. Requete MySQL sur plusieurs tables
    Par romulus67 dans le forum Requêtes
    Réponses: 10
    Dernier message: 03/07/2006, 17h45
  5. Réponses: 4
    Dernier message: 08/06/2006, 20h06

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