Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/08/2011, 20h24   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 12
Points : 3
Points : 3
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 :
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
plorton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 20h39   #2
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
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
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 21h28   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 12
Points : 3
Points : 3
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 :
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 !
plorton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 22h28   #4
Membre confirmé
 
Inscription : juillet 2011
Messages : 146
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : juillet 2011
Messages : 146
Points : 253
Points : 253
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 ?
Tolriq est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/08/2011, 23h13   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 12
Points : 3
Points : 3
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 ?
plorton est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 08h58   #6
Invité de passage
 
Inscription : décembre 2010
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 12
Points : 3
Points : 3
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 :
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).
plorton est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h11.


 
 
 
 
Partenaires

Hébergement Web