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 :

Problème de jointure


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Par défaut Problème de jointure
    Bonjour,

    J'ai 2 tables, une table record contenant mes enregistrements d'objets, et une table ref fesant la liaison entre ces objets.

    Exemple :
    record : NOMENCLATURE | 2104374A00 | .A.A | ... | 40335 | TVM 430 - PANIER PIC
    avec dans l'ordre les champs rectype, recname, recalt, ..., objid, desc
    ref : ARTICLE | 1008022E | A | ... | 40335
    avec dans le même ordre les champs rectype, recname, recalt, ..., objid

    Le lien entre les deux tables est donc fait grâce à objid.

    Sur ma page php, je présente les caractéristiques de ma nomenclature (par une requête simple sur la table record) puis je veux lister mes composants de nomenclature avec une requête de jointure, et c'est là qu'il y a soucis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res3=mysql_query("select * from record rec1, ref ref1 where rec1.objid='$objid' and rec1.objid=ref1.objid") or die(mysql_error());
    $objid contenant l'objid de la nomenclature dont je donne les caractéristiques en haut de page.

    Le résultat de cette requête m'affiche les rectype, recname et recalt de la table ref, et non pas de la table record. Je ne peux donc par exemple pas afficher la valeur du champ desc de la table record.

    Quelqu'un voit-il d'où ça peut venir svp ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    essaie ainsi, si j'ai bien compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select rec1.* 
    from record rec1, 
    ref ref1 
    where rec1.objid='$objid' 
    and rec1.objid=ref1.objid
    Au passage, on peut faire ainsi (enfin si ta version du moteur de mysql le supporte...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT rec1.*
    FROM record rec1
    INNER JOIN ref ref1 ON(rec1.objid=ref1.objid)
    WHERE rec1.objid='$objid'
    C'est exactement la même chose, mais d'un point de vue lecture sa permet de repérer les jointures plus rapidement.

    bye

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Par défaut
    J'avais déjà essayé de préciser la table pour le select * mais le soucis c'est qu'avec cette requête, il me ressort les caractéristiques de la nomenclature de la table record (celles que j'affiche déjà avant) :

    NOMENCLATURE | 2104374A00 | .A.A | ... | 40335 ...

    Donc pas de desc ...

    Pour que ce soit plus explicite, je vous montre la logique de ma page

    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
    //Je reçois les paramètres par GET, que je traite, puis je m'en sers pour une première requête
     
    $res=mysql_query("select * from record where rectype='NOMENCLATURE' and recname='$refNom' and recalt='$indice'") or die("Erreur de requête");
     
    if(mysql_num_rows($res)==1) //Si un résultat unique
    {
    	$afficheLien=1;
    	while ($row = mysql_fetch_assoc($res)) // On parcours la liste des résultats (ici, un seul)
    	{
    		//J'affiche mon tableau d'infos
    		...
    		$objid=$row['objid']; // Les 3 variables qui suivent sont stockées et serviront à lister les différents composants de la nomenclature
    		$recn=$row['recname'];
    		$ind=$row['recalt'];
    	}
    }
     
    if($afficheLien==1)
    {
    	$res3=mysql_query("SELECT rec1.* FROM record rec1 INNER JOIN ref ref1 ON(rec1.objid=ref1.objid) WHERE rec1.objid='$objid'") or die(mysql_error()); // On va chercher la liste des composants en fonction de l'identifiant de la nomenclature précédente
     
    	while($row3 = mysql_fetch_assoc($res3))
    	{
    		//Affichage classique
    	}
    }

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    avant toute chose il me semble qu'il y a des champs identiques sur tes 2 tables non??

    recname, recalt, ..., objid

    le seul qui doitêtre commun au 2 et objid ou sinon j'ai pas bien compris la structure de ta table!

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 63
    Par défaut
    oui, il y a bien des champs en commun, mais la liaison entre les deux tables est faite grâce à objid.

    il est vrai que rectype, recname ou recalt sont redondants, mais la table ref contient des infos que record n'a pas, et inversement; dont la desc, que je veux récupérer dans record. Si elle était dans ref, ce serait plus simple :p

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    En fait si je comprend mieu il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT rec1.rectype, rec1.recname,rec1.recalt,ref1.desc
    FROM record rec1
    INNER JOIN ref ref1 ON(rec1.objid=ref1.objid)
    WHERE rec1.objid='$objid'
    Nommés les champs de table, non ?

    bye

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    Citation Envoyé par romfauch63 Voir le message
    oui, il y a bien des champs en commun, mais la liaison entre les deux tables est faite grâce à objid.

    il est vrai que rectype, recname ou recalt sont redondants, mais la table ref contient des infos que record n'a pas, et inversement; dont la desc, que je veux récupérer dans record. Si elle était dans ref, ce serait plus simple :p
    ca ui j'avais compris ct juste pour te dires que c champs sont inutiles et que la sutructure de ta base est mauvaise reprend la et ensuite les requétes seront plus simples

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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