[Résolu] Une question de jointure ...

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.9.4.2
#~ Url du site : http://www.amavie.fr
#~ Hébergeur / Soft : Gandi.net
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Bonjour,
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.
Code :
$db = &$gCms->GetDb();

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_db_prefix()."feusers_loggedin AS f1
    LEFT JOIN ".cms_db_prefix()."feusers_users AS f2 ON f1.userid = f2.id // résultat id du souscripteur (son email)
  LEFT JOIN ".cms_db_prefix()."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é diverses syntaxes en utilisant les jointures avec les tables de Feu ...

Le résultat reste vide !

Et ... comment faire si plusieurs utilisateurs sont connectés en même temps ?
J'ai essayé de créer une variable de session intégrée au gabarit de connexion, sans succès !

Merci de vos aides éventuelles.
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.9.4.2
#~ Url du site : http://www.amavie.fr
#~ Hébergeur / Soft : Gandi.net
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Bonjour,
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.
Code :
$db = &$gCms->GetDb();

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_db_prefix()."feusers_loggedin AS f1
    LEFT JOIN ".cms_db_prefix()."feusers_users AS f2 ON f1.userid = f2.id // résultat id du souscripteur (son email)
  LEFT JOIN ".cms_db_prefix()."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é diverses syntaxes en utilisant les jointures avec les tables de Feu ...

Le résultat reste vide !

Et ... comment faire si plusieurs utilisateurs sont connectés en même temps ?
J'ai essayé de créer une variable de session intégrée au gabarit de connexion, sans succès !

Merci de vos aides éventuelles.
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
#2
Philipppe a écrit :J'ai essayé diverses syntaxes en utilisant les jointures avec les tables de Feu ...

Solution trouvée vers 2 heures du mat, en lisant des posts sur le forum "développez.com" : le copier/coller la "partie SQL" directement dans PhpMyAdmin fourni des niveaux de détail d'erreur qui me conviennent mieux dans ce contexte que le debug de CmsMs !

En fait ma requête est propre ... à ceci près : un mot manquant dans la désignation des tables du module feuseurs !
A force de chercher à optimiser le code ..., à comprimer ..., j'avais écrit cms_feusers_loggedin au lieu de cms_module_feusers_loggedin ...

Donc, le code opérationnel :
Code :
$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 ";

Reste maintenant pour moi à utiliser la variable de session du module Feu dans le cas où plusieurs personnes sont connectées en même temps !
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
#2
Philipppe a écrit :J'ai essayé diverses syntaxes en utilisant les jointures avec les tables de Feu ...

Solution trouvée vers 2 heures du mat, en lisant des posts sur le forum "développez.com" : le copier/coller la "partie SQL" directement dans PhpMyAdmin fourni des niveaux de détail d'erreur qui me conviennent mieux dans ce contexte que le debug de CmsMs !

En fait ma requête est propre ... à ceci près : un mot manquant dans la désignation des tables du module feuseurs !
A force de chercher à optimiser le code ..., à comprimer ..., j'avais écrit cms_feusers_loggedin au lieu de cms_module_feusers_loggedin ...

Donc, le code opérationnel :
Code :
$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 ";

Reste maintenant pour moi à utiliser la variable de session du module Feu dans le cas où plusieurs personnes sont connectées en même temps !
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
#3
Code :
$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 ";

tu peux te passer du préfixe "cms_" en utilisant mon exemple (voir le blog que je t'ai filé il y a quelques jours)

l'avantage c'est que ton code fonctionnera sur toutes les installations.
#3
Code :
$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 ";

tu peux te passer du préfixe "cms_" en utilisant mon exemple (voir le blog que je t'ai filé il y a quelques jours)

l'avantage c'est que ton code fonctionnera sur toutes les installations.
#4
Merci bess ... j'ai lu, vu, et testé !
Et je partage le soucis de portabilité du code ... et ma version de production sera optimisé autant que je saurai le faire !

Pour l'instant, mon handicap moteur me fait préférer coder :
- cms_ = 4 caractères
plutôt que
- ".cms_db_prefix()." = 19 caractères sans compter les <Maj>pour rendre le <.> sur un clavier de portable 11 pouces ..... (mon dos n'y resisteras pas en ce moment).

Sans compter la nécessité de repasser à la version cms_ quand je poste un code sur un forum autre que CmsMs !

A suivre !
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)
#4
Merci bess ... j'ai lu, vu, et testé !
Et je partage le soucis de portabilité du code ... et ma version de production sera optimisé autant que je saurai le faire !

Pour l'instant, mon handicap moteur me fait préférer coder :
- cms_ = 4 caractères
plutôt que
- ".cms_db_prefix()." = 19 caractères sans compter les <Maj>pour rendre le <.> sur un clavier de portable 11 pouces ..... (mon dos n'y resisteras pas en ce moment).

Sans compter la nécessité de repasser à la version cms_ quand je poste un code sur un forum autre que CmsMs !

A suivre !
Philippe
CmsMs V1.6.11 Fr (merci jce) et V1.11.x Fr
Hébergeur Free.fr, Gandi.net (GandiAI et SimpleHosting)


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)