A voir également:
- Recherche pdo dans tableau 2 dimenssion pour newbee
- Tableau croisé dynamique - Guide
- Code ascii tableau - Guide
- Tableau word - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Trier tableau excel - Guide
2 réponses
yg_be
Messages postés
23316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
Ambassadeur
1 552
19 févr. 2017 à 20:48
19 févr. 2017 à 20:48
bonsoir,
si je comprends bien, MEMBERS.MEMBERS_GROUPE permet de déterminer le groupe du membre, car il est identique à la valeur de MEMBERS_GROUPE.MEMBERS_GROUPE_ID pour le groupe corrspondant.
c'est exact?
ce serait bien que tu expliques ce que tu veux réaliser.
veux-tu obtenir la liste des membres ayant MEMBERS_GROUPE.MEMBERS_GROUPE_LANG = 'fr'?
si oui, je te suggère ceci:
si je comprends bien, MEMBERS.MEMBERS_GROUPE permet de déterminer le groupe du membre, car il est identique à la valeur de MEMBERS_GROUPE.MEMBERS_GROUPE_ID pour le groupe corrspondant.
c'est exact?
ce serait bien que tu expliques ce que tu veux réaliser.
veux-tu obtenir la liste des membres ayant MEMBERS_GROUPE.MEMBERS_GROUPE_LANG = 'fr'?
si oui, je te suggère ceci:
Select MEMBERS.MEMBERS_ID, MEMBERS.MEMBERS_USERNAME, MEMBERS.MEMBERS_GROUPE From MEMBERS, MEMBERS_GROUPE on MEMBERS.MEMBERS_GROUPE = MEMBERS_GROUPE.MEMBERS_GROUPE_ID where MEMBERS_GROUPE.MEMBERS_GROUPE_LANG = 'fr'Cela te donnera les utilisateurs qui t’intéressent.
jordane45
Messages postés
38278
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 novembre 2024
4 697
21 févr. 2017 à 00:06
21 févr. 2017 à 00:06
Partons du principe que tu as fais ta requête en PDO et que tu as utilisé un fetchAll (en fetch ASSOC ) pour stocker le résultat de la requête dans un array.
Il te suffit de retravailler un peut ton array pour obtenir ce que tu souhaites;
Par exemple :
Il te suffit de retravailler un peut ton array pour obtenir ce que tu souhaites;
Par exemple :
//affichage des erreurs php error_reporting(E_ALL); /* * Petite fonction de debug */ function debug($var){ echo '<br><pre>'; print_r($var); echo '</pre><br>'; } // Je créé un array fictif pour simuler ce que ta requete retourne: $resultatFetchAll = array(); $resultatFetchAll[] = array('id'=>2,'name'=> 'Jean','groupe'=>'groupe1','id_groupe'=>1); $resultatFetchAll[] = array('id'=>2,'name'=> 'Jean','groupe'=>'groupe5','id_groupe'=>5); $resultatFetchAll[] = array('id'=>2,'name'=> 'Jean','groupe'=>'groupe8','id_groupe'=>8); echo " Array résultat du fetchAll suite à ta requete :<b>"; debug($resultatFetchAll); //On va remettre en "forme" ton array pour le rendre exploitable $arrFinal = array(); //array qui contiendra les données restructurées foreach($resultatFetchAll as $K=>$row){ $id_user = $row['id']; $name = $row['name']; $groupe = $row['groupe']; $id_groupe = $row['id_groupe']; $arrFinal[$id_user]['name'] = $name; $arrFinal[$id_user]['groupes'][] = array('id_groupe'=> $id_groupe, 'groupe'=>$groupe); } echo " Affichage de l'array restructuré :<b>"; debug($arrFinal); // et donc pour l'utiliser ... if(!empty($arrFinal)){ foreach($arrFinal as $id=>$datas){ echo " <br>id user :$id - name : " . $datas['name'] ; $groupes = !empty($datas['groupes']) ? $datas['groupes'] : array(); foreach($groupes as $grp){ echo " <b>GROUPES :</b>id groupe : ".$grp['id_groupe'] . " -> " . $grp['groupe']; } } }
jordane45
Messages postés
38278
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 novembre 2024
4 697
21 févr. 2017 à 00:15
21 févr. 2017 à 00:15
Et sinon ... tu peux aussi (mais après tout dépend de tes besoins....) faire, dans ta requête, du GROUP_CONCAT histoire de tout récupérer sur une seule ligne...(mais la manipulation ensuite est plus compliquée car il faudra splitter les chaines de caractères...)
Exemple :
https://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php
Exemple :
https://www.w3resource.com/mysql/aggregate-functions-and-grouping/aggregate-functions-and-grouping-group_concat.php
yg_be
Messages postés
23316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
1 552
>
jordane45
Messages postés
38278
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 novembre 2024
21 févr. 2017 à 11:42
21 févr. 2017 à 11:42
je me demande si un GROUP_CONCAT(MEMBERS_GROUPE.MEMBERS_GROUPE_GROUPENAME) ne suffirait pas, sans manipulation supplémentaire.
jordane45
Messages postés
38278
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 novembre 2024
4 697
>
yg_be
Messages postés
23316
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 novembre 2024
21 févr. 2017 à 13:13
21 févr. 2017 à 13:13
Je dirais même plus... pourquoi pas faire un group_concat.. ?
Plus sérieusement. ... C'est juste la proposition que j'ai fait juste au dessus...
Après. .. tout dépend de ce qu'il veut fqire des données. ...
Plus sérieusement. ... C'est juste la proposition que j'ai fait juste au dessus...
Après. .. tout dépend de ce qu'il veut fqire des données. ...
Bonjour,
Merci Jordane45 pour le script exemple, c'est bien plus concret pour moi (débutant de la 1ere heure) avec cet exemple !
L'idée est d'afficher tout sur une même ligne dans un tableau.
J'ai donc créer sur ma base de données Mysql une table intermédiaire pour effectuer ma jointure left.
Pour le moment j'essaye sans résultat d'écrire la requête.
Pour rappel l'objectif de cette démarche est d'afficher un tableau qui permettrait de récapituler les groupes d'appartenance d'un utilisateur. Ce tableau peut ressembler à cela :
USERNAME | Nom groupe 1 | Nom groupe 2 | Nom groupe 3 | ... (dynamique)
Jean - Oui - Non - Oui - ....
Paul - Non - Non - Oui -
et aussi du coup afficher les groupes ainsi :
USERNAME | Groupes |
Jean - Nom groupe1; Nom groupe 3; |
Paul - Nom groupe3;
Intellectuellement c'est pas simple tout de même cette histoire de left join quand on rajoute une table intermédiaire ... Je vais essayer de me concentrer la dessus ! j'ai trouvé des tuto avec deux tables mais pas 3 pour le moment.
Ensuite je regarderai de plus près votre suggestion avec GROUP_CONCAT !
Si vous avez des suggestions d'article ou de code je suis preneur, en attendant j'essaye de me débrouiller !
Merci Jordane45 pour le script exemple, c'est bien plus concret pour moi (débutant de la 1ere heure) avec cet exemple !
L'idée est d'afficher tout sur une même ligne dans un tableau.
J'ai donc créer sur ma base de données Mysql une table intermédiaire pour effectuer ma jointure left.
Pour le moment j'essaye sans résultat d'écrire la requête.
Pour rappel l'objectif de cette démarche est d'afficher un tableau qui permettrait de récapituler les groupes d'appartenance d'un utilisateur. Ce tableau peut ressembler à cela :
USERNAME | Nom groupe 1 | Nom groupe 2 | Nom groupe 3 | ... (dynamique)
Jean - Oui - Non - Oui - ....
Paul - Non - Non - Oui -
et aussi du coup afficher les groupes ainsi :
USERNAME | Groupes |
Jean - Nom groupe1; Nom groupe 3; |
Paul - Nom groupe3;
Intellectuellement c'est pas simple tout de même cette histoire de left join quand on rajoute une table intermédiaire ... Je vais essayer de me concentrer la dessus ! j'ai trouvé des tuto avec deux tables mais pas 3 pour le moment.
Ensuite je regarderai de plus près votre suggestion avec GROUP_CONCAT !
Si vous avez des suggestions d'article ou de code je suis preneur, en attendant j'essaye de me débrouiller !
jordane45
Messages postés
38278
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 novembre 2024
4 697
>
Signaler flunsh
Modifié par jordane45 le 21/02/2017 à 15:39
Modifié par jordane45 le 21/02/2017 à 15:39
C'est aussi simple que :
SELECT * FROM tableintermediaire T1 LEFT JOIN tblGroup G ON G.id = T1.id_grp LEFT JOIN tblUser U ON U.id = T1.id_user
Modifié par Mosa le 19/02/2017 à 21:04
Non ce n'est pas le cas, la valeur MEMBERS_GROUPE peut avoir plusieurs groupes, les données sont stockées ainsi :
3;32;5
ou 3 = groupe1
32 = groupe 2
5 = groupe 3
c'est les id de groupes...
Modifié par yg_be le 19/02/2017 à 20:57
j'imagine que tu as fait ainsi parce qu'un membre peut faire partie de plusieurs groupes, c'est bien cela?
19 févr. 2017 à 21:05
on ne peut pas faire de requête puisque dans la table MEMBRE il y a les id MEMBRE_GROUPE_ID sous la forme 3;32;5 (chaque ID de groupe séparé par ; )
La solution tel que c'est fait est de faire du traitement PHP
Je reprends un programme d'un collègue pour le compléter ...
19 févr. 2017 à 21:18
ne peux-tu pas faire ainsi?
Modifié par Mosa le 19/02/2017 à 21:35