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 :

Pb avec une requête jointure [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Pb avec une requête jointure
    Bonsoir,
    Comment terminer cette requête qui doit :
    - Séléctionner certains champs de la table cms_0agree, qui contient mes données
    - quand la valeur du champs cms_0agree.email = valeur du champs cms_feusers_users.username correspondant à l'id de l'utilisateur connecté sur la page qui appelle le script, soit cms_feusers_loggedin.userid
    - afficher le résultat.

    Donc une requête sur trois tables de la même base de 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
    echo "<table>";
     
    $query = "SELECT f1.userid, f2.id, f2.username, a.civilite, a.nom, a.prenom, a.adresse, a.cp, a.ville, a.agree, a.dateAgrement, a.rcpro
    FROM cms_feusers_loggedin AS f1
        LEFT JOIN cms_feusers_users AS f2 ON f1.userid = f2.id // résultat id du souscripteur (son email)
      LEFT JOIN cms_0agree AS a ON f2.username = a.email ";
     
    $dbretour = &$db->Execute($query);//exécution de la requête
    if($dbretour === false) { echo "La requête provoque une erreur !";exit();}
     
    while ($row = $dbretour->FetchRow())
    {
    echo <<<AFFICHE
    <tr>
        <td class="colIntitules">-&nbsp;Praticien(ne)&nbsp;:&nbsp;</td>
        <td class="colDonnees">{$row['civilite']}&nbsp;{$row['prenom']}&nbsp;{$row['nom']}</td>
    </tr>
     
    <tr>
        <td colspan="2">afficher les chams utiles !
        </td>
    </tr>
    AFFICHE;
    }
    echo "</table>";
    //
    J'ai essayé plusieurs combinaisons, sans succès !

    Merci de votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    Hum ce qui se comprends bien s'énonce bien

    Ton explication des données que tu veux récupérer n'est pas très très claire.

    Mais a priori tu veut des données venant de ta table cms_0agree, donc pour plus de lisibilité je te conseille de partir de cette table et faire tes jointure dessus.

    Ensuite tu rajoute des filtres mais qui d'après ton explication seront a base de IS NOT NULL par exemple ce qui n'est pas parfait.

    Sinon tu as la solution du select from cms_0agree where a.email in ( select ....) pour recupérer les emails qui t'intéresse.

    Mais dur de plus t'aider sans une explication plus précise

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci de ton début de réponse !
    Citation Envoyé par Tolriq Voir le message
    Hum ce qui se comprends bien s'énonce bien

    Mais dur de plus t'aider sans une explication plus précise
    Donc sur le site http://www.amavie.fr, je dois afficher un formulaire de souscription en deux parties :
    - 1 Afficher les données d'état civil de la personne connectée, identifiée par son adresse email
    - 2 Afficher un formulaire où la personne saisie des compléments d'informations envoyées dans une table dédiée avec la méthode POST (cette partie est résolue).

    La structure de la base :
    1 table feusers_loggedin stocké l'identification de session de la personne connectée, notamment dans le champs userid(= un nombre de 3 chiffres)
    2 table feusers_users stocke les informations des utilisateurs, champs id = le nombre à 3 chiffres qui relie ces deux tables + username = identifiant de connexion (sous forme email)
    3 table 0agree qui stocke les détails de chaque utilisateur, le champs servant à relier l'ensemble !

    Donc, je remts le code de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "SELECT f1.userid, f2.id, f2.username, a.civilite, a.nom, a.prenom, a.adresse, a.cp, a.ville, a.agree, a.dateAgrement, a.rcpro
    FROM cms_feusers_loggedin f1, cms_feusers_users f2, cms_0agree a
    WHERE f1.userid = f2.id
    	AND f2.username = a.email ";
    Merci de ton aide !

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 146
    Points : 262
    Points
    262
    Par défaut
    C'est un peu plus clair

    J'avoue que faire une jointure entre un champs username et un champ email c'est pas des plus logique pour suivre.

    A mon avis dans ton code il manque quand même un truc, comment gères tu le cas ou 2 personnes sont logguée sur ton site et font la même manipulation ?

    Ton userid devrait être stocké en session après l'authentification pour ensuite ne rechercher que les lignes correspondant a cet user id non ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ok, merci...
    Citation Envoyé par Tolriq Voir le message
    C'est un peu plus clair

    J'avoue que faire une jointure entre un champs username et un champ email c'est pas des plus logique pour suivre.

    A mon avis dans ton code il manque quand même un truc, comment gères tu le cas ou 2 personnes sont logguée sur ton site et font la même manipulation ?

    Ton userid devrait être stocké en session après l'authentification pour ensuite ne rechercher que les lignes correspondant a cet user id non ?
    - 1 Concernant la logique valeur username = valeur email, c'est parce que l'utilisateur connecté est identifié par son email ! (c'est une information que personne n'oublie !)
    - 2 La table feusers_loggedin contiens un champs qui stocke la variable de session créée quand la personne se connecte
    - 3 Ce qui me permets de filtrer le bon utilisateur ! (mais jen'ai pas intégré cela dans la requête, pour simplifier !

    As-tu une piste de solution pour rendre mon code fonctionnel ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    Ce matin, j'ai trouvé sur un fil de ce forum LA méthode pour trouver les causes d'erreur d'une requête : un copier/coller dans la fenêtre SQL de PhpMyAdmin ... + exécuter la requête directement dans la base ... => SQL donne des informations très détaillées sur les causes d'erreur ... !
    Merci à m4riachi et Anthony89 de ce forum, et à toi Tolriq !

    Mon erreur ?
    A force de chercher à optimiser chaque fois un peu plus le code ..., j'ai fait un"raccourci"de trop ... et il manquait un mot à la désignation de deux tables !

    Donc, j'avais le bon code dès le début, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query = "SELECT f1.userid, f2.id, f2.username, a.civilite, a.nom, a.prenom, a.adresse, a.cp, a.ville, a.agree, a.dateAgrement, a.rcpro
    FROM cms_module_feusers_loggedin AS f1
        LEFT JOIN cms_module_feusers_users AS f2 ON f1.userid = f2.id
      LEFT JOIN cms_0agree AS a ON f2.username = a.email ";
    (j'oubliais cms_module_feusers_loggedin ...

    Bonne journée à chacun(e).

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

Discussions similaires

  1. [sql] Probème avec une requète jointure
    Par seyrinian dans le forum SQL
    Réponses: 3
    Dernier message: 30/12/2014, 17h13
  2. [Recordset] Incompatibilté de type avec une requête
    Par lbourlet dans le forum Access
    Réponses: 2
    Dernier message: 29/10/2004, 15h52
  3. PB avec une requête Count
    Par Marion dans le forum ASP
    Réponses: 7
    Dernier message: 05/07/2004, 12h56
  4. Pb avec une requête
    Par arsgunner dans le forum ASP
    Réponses: 4
    Dernier message: 14/06/2004, 08h40
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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