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 :

Affichage profil complet avec tables intermédiaires multiples [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut Affichage profil complet avec tables intermédiaires multiples
    Bonjour,

    Toujours dans le développement d'une console d'administration, je rencontre un problème de requête SQL avec tables intermédiaires multiples.

    La requête suivante fonctionne à 80%, mais dès que l'ID Membre n'est pas présent dans l'une des tables intermédiaires, il m'affiche l'ensemble des fonctions présentes dans la table et non celles du membre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $mbr_query = "SELECT *,    GROUP_CONCAT(DISTINCT groupe ORDER BY groupe SEPARATOR ', ') AS groupe_list,
    	GROUP_CONCAT(DISTINCT type_membre ORDER BY type_membre SEPARATOR ', ') AS type_membre_list,
    	GROUP_CONCAT(DISTINCT fonction ORDER BY fonction SEPARATOR ', ') AS fonction_list,
    	GROUP_CONCAT(DISTINCT panel ORDER BY panel SEPARATOR ', ') AS panel_list
    	FROM tbl_groupe AS G, tbl_type_membre AS TM, tbl_fonction AS F, tbl_panel AS P, tbl_mbr_inter_groupe AS TIG, tbl_mbr_inter_type_membre AS TIM, tbl_mbr_inter_fonction AS TIF, tbl_mbr_inter_panel AS TIP, tbl_membre AS M
    	LEFT JOIN tbl_droits ON tbl_droits_id = tbl_droits.droits_id
    	LEFT JOIN tbl_cs_cat ON tbl_cs_cat_id = tbl_cs_cat.cs_cat_id
    	LEFT JOIN tbl_talent_card ON tbl_talent_id = tbl_talent_card.talent_id
    	LEFT JOIN tbl_test_arp ON tbl_test_arp_id = tbl_test_arp.test_arp_id
    	LEFT JOIN tbl_test_usp ON tbl_test_usp_id = tbl_test_usp.test_usp_id
    	WHERE (M.mbr_id =" .$_GET['id'].") AND (TIG.inter_mbr_id = M.mbr_id AND TIG.inter_groupe_id = G.groupe_id 
    	AND TIM.inter_mbr_id = M.mbr_id AND TIM.inter_type_membre_id = TM.type_membre_id
    	OR TIF.inter_mbr_id = M.mbr_id AND TIF.inter_fonction_id = F.fonction_id
    	OR TIP.inter_mbr_id = M.mbr_id AND TIP.inter_panel_id = P.panel_id)";
    J'ai essayé différentes façons de faire mais aucune ne répond à mes besoins.

    Le but est d'afficher le profil complet du membre.

    merci d'avance pour votre aide...

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Commence par utiliser JOIN pour toutes tes jointures au lieu de les mettre en WHERE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Salut et merci pour la réponse,

    Tu pourrais juste préciser comment les jointer?
    J'ai essayé plusieurs fois et ça tourne en boucle sur le serveur...

    Merci d'avance

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme tu le fais deja sur une partie de ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FROM tableA
    JOIN tableB ON colonne1 = colonne2
    JOIN tableC on colonne3 = colonne4
    etc.
    Pour le debugage, contrôle tes jointures une à une : fais la requête avec une seule jointure, si le résultat est bon, ajoute la jointure avec la 3ème table etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    OK, je viens de tester avec le groupe des membres, et ça marche tant que le membre fait partie de 1 ou plusieurs groupes, mais dans le cas ou il ne fait partie d'aucun groupe il affiche un profil vide...

    Tu as une idée pour faire la requête en lui disant que si l'ID du membre n'est pas dans la table inter, il ne fait tout simplement rien...

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 58
    Points : 33
    Points
    33
    Par défaut
    Bien voilà, ça fonctionne...

    Il fallait juste faire les jointures dans le bon sens...

    Un grand merci, et juste avant de marquer comme résolu une petite question pratique...

    Pour la modification du profil, je me souviens qu'il existe une fonction qui récupère le dernier ID, si tu pouvais juste me rappeler son nom...

    Bonne nuit

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si un membre ne fait pas forcemment partie d'un groupe tu dois avoir
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM tbl_membre AS M 
    LEFT JOIN tbl_mbr_inter_type_membre AS TIM ON TIM.inter_mbr_id = M.mbr_id
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Jointure N-N avec table intermédiaire
    Par aspiman dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/10/2018, 03h14
  2. contrainte d'intégrité avec table intermédiaire
    Par Shatter dans le forum Débuter
    Réponses: 2
    Dernier message: 12/03/2011, 19h45
  3. [1.x] embedForms 1:n avec table intermédiaire
    Par Herode dans le forum Symfony
    Réponses: 3
    Dernier message: 19/11/2010, 17h44
  4. Requête avec table intermédiaire
    Par jgfa9 dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/03/2007, 18h51
  5. Réponses: 2
    Dernier message: 02/08/2006, 10h25

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