Recherche pdo dans tableau 2 dimenssion pour newbee
Mosa
-
Signaler flunsh -
Signaler flunsh -
Bonjour,
Je suis un hyper débutant :-)
J'ai besoin d'aide pour effectuer la recherche de valeur dans un tableau a deux dimension, ça va même un peu plus loin, je vous explique.
J'ai un tableau à 2 dimensions qui est le résultat de cette requête :
j'effectue une requête pour lister des utilisateurs
J'affiche les données
Les données correspondant a MEMBERS_GROUPE dans la base MEMBERS sont enregistrées ainsi : 3;10;52
Je n'arrive pas a écrire la fonction affgroupe() qui doit parser un tableau a deux dimensions qui est le résultat de la 1ere requête !
je n'arrive pas a trouver de fonction qui permette de trouver le nom du groupe avec l'ID du groupe.
Pouvez vous me donner une coup de pouce ?
Je suis un hyper débutant :-)
J'ai besoin d'aide pour effectuer la recherche de valeur dans un tableau a deux dimension, ça va même un peu plus loin, je vous explique.
J'ai un tableau à 2 dimensions qui est le résultat de cette requête :
$stmt2 = $db->prepare("Select
MEMBERS_GROUPE.MEMBERS_GROUPE_ID,
MEMBERS_GROUPE.MEMBERS_GROUPE_GROUPENAME,
MEMBERS_GROUPE.MEMBERS_GROUPE_LANG,
MEMBERS_GROUPE.MEMBERS_GROUPE_ACTIVE
From
MEMBERS_GROUPE
Where
MEMBERS_GROUPE.MEMBERS_GROUPE_LANG = 'fr'");
$stmt2->execute();
$rowg = $stmt2->fetch(PDO::FETCH_BOTH );
j'effectue une requête pour lister des utilisateurs
$stmt= $db->prepare("Select
MEMBERS.MEMBERS_ID,
MEMBERS.MEMBERS_USERNAME,
MEMBERS.MEMBERS_GROUPE
From
MEMBERS");
$stmt->execute();
J'affiche les données
<table >
<thead>
<tr>
<th data-field="id" data-sortable="true">ID</th>
<th data-field="name" data-sortable="true">Nom</th>
<th data-field="groupe" data-sortable="true">Groupes</th>
</tr>
<tbody>
<?php
while ($row = $stmt->fetch(PDO::FETCH_BOTH)) {
$groupe = explode(";",$row['MEMBERS_GROUPE']);
?>
<tr>
<td ><?php echo $row['MEMBERS_ID']; ?></td>
<td ><?php echo $row['MEMBERS_USERNAME']; ?></td>
<td ><?php
foreach ($groupe as $value) { echo affgroupe($value); }
?></td>
</tr>
<?php
}
?>
</tbody>
</thead>
</table>
Les données correspondant a MEMBERS_GROUPE dans la base MEMBERS sont enregistrées ainsi : 3;10;52
Je n'arrive pas a écrire la fonction affgroupe() qui doit parser un tableau a deux dimensions qui est le résultat de la 1ere requête !
je n'arrive pas a trouver de fonction qui permette de trouver le nom du groupe avec l'ID du groupe.
Pouvez vous me donner une coup de pouce ?
A voir également:
- Recherche pdo dans tableau 2 dimenssion pour newbee
- Tableau word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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']; } } }
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
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 !
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...
j'imagine que tu as fait ainsi parce qu'un membre peut faire partie de plusieurs groupes, c'est bien cela?
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 ...
ne peux-tu pas faire ainsi?