Requete SQL sous la forme d'un tableau bidimensionnel
Résolu
victorberson
Messages postés
139
Date d'inscription
Statut
Membre
Dernière intervention
-
victorberson Messages postés 139 Date d'inscription Statut Membre Dernière intervention -
victorberson Messages postés 139 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Ma table SQL contient le noms de matière associé à une promotion. Il y à un nombre fini de promotion (5) mais le nombre de matière peut varier
Je souhaite pouvoir récuperer les données de ma table sous la forme d'un tableau a 2 dimension comme ceci :
$tab = array($annee1 = array(Math,Espagnol,etc...), $annee2 = array(Math,Anglais,etc...), etc...)
J'ai essayé ce code mais je manipule mal les tableaux...
Je précise que ce code n'est pas destiné à l'affichage
Merci d'avance pour vos idées et votre aide
Victor
Ma table SQL contient le noms de matière associé à une promotion. Il y à un nombre fini de promotion (5) mais le nombre de matière peut varier
Je souhaite pouvoir récuperer les données de ma table sous la forme d'un tableau a 2 dimension comme ceci :
$tab = array($annee1 = array(Math,Espagnol,etc...), $annee2 = array(Math,Anglais,etc...), etc...)
J'ai essayé ce code mais je manipule mal les tableaux...
$tab = array($IE1 = array(),$IE2 = array(),$IE3 = array(),$IE4 = array(),$IE5 = array());
$sql = "SELECT DISTINCT promo FROM promo_matiere";
if($result=mysqli_query($link,$sql))
{
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result))
{
$sql2 = "SELECT nom_matiere FROM promo_matiere WHERE promo = ".$row["promo"];
if($result2 = mysqli_query($link,$sql2))
{
if(mysqli_num_rows($result2) > 0)
{
$i1 = 0;
$i2 = 0;
$i3 = 0;
$i4 = 0;
$i5 = 0;
while($row2 = mysqli_fetch_assoc($result2))
{
switch (promoActuelle($row["promo"]))
{
case 1:
$IE1[$i1] = $row2["nom_matiere"];
$i1++;
break;
case 2:
$IE2[$i2] = $row2["nom_matiere"];
$i2++;
break;
case 3:
$IE3[$i3] = $row2["nom_matiere"];
$i3++;
break;
case 4:
$IE4[$i4] = $row2["nom_matiere"];
$i4++;
break;
case 5:
$IE5[$i5] = $row2["nom_matiere"];
$i5++;
break;
}
}
foreach ($tab as $value) {
foreach ($value as $val) {
echo $val."<br/>";
}
}
}
}
}
}
}
Je précise que ce code n'est pas destiné à l'affichage
Merci d'avance pour vos idées et votre aide
Victor
Configuration: Windows / Firefox 68.0
A voir également:
- Requete SQL sous la forme d'un tableau bidimensionnel
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Mise en forme conditionnelle excel - Guide
- Imprimer un tableau excel - Guide
1 réponse
Bonjour,
Pour commencer une petite astuce, si tu écris
Deuxième astuce, en PHP les noms de variables sont variabilisables. À savoir, tu peux écrire
Ces deux éléments combinés font que tout ton switch peut se réduire à :
Ceci dit, l'utilisation de ces multiples variables n'a pas beaucoup d'intérêt, surtout que tu les places déjà dans le tableau $tab. Donc tu peux écrire simplement :
Bon, voilà pour la cosmétique.
Passons maintenant au cœur du problème. Je ne comprends pas bien pourquoi tu effectues ta requête en deux étapes alors que toutes les infos sont dans la même table. Tu peux simplement exécuter
Je te propose donc tout simplement :
Xavier
Pour commencer une petite astuce, si tu écris
$tableau[] = $valeur, PHP va comprendre tout seul qu'il faut mettre $valeur dans la prochaine « case » disponible du tableau. Tu n'as donc pas besoin de t'embêter à gérer les $i.
Deuxième astuce, en PHP les noms de variables sont variabilisables. À savoir, tu peux écrire
$variable1 = 'truc'aussi bien que
$i = 1; $variable$i = 'truc'.
Ces deux éléments combinés font que tout ton switch peut se réduire à :
$i = promoActuelle($row["promo"]); $IE$i[] = $row2["nom_matiere"];
Ceci dit, l'utilisation de ces multiples variables n'a pas beaucoup d'intérêt, surtout que tu les places déjà dans le tableau $tab. Donc tu peux écrire simplement :
$i = promoActuelle($row["promo"]); $tab[$i][] = $row2["nom_matiere"];et supprimer les appellations $IEx de ton code.
Bon, voilà pour la cosmétique.
Passons maintenant au cœur du problème. Je ne comprends pas bien pourquoi tu effectues ta requête en deux étapes alors que toutes les infos sont dans la même table. Tu peux simplement exécuter
SELECT promo, nom_matiere FROM promo_matiere;, cela te donnera toutes les matières et la promo qui va avec. Comme ça on peut parcourir le résultat en une seule boucle, ce qui évite de se faire des nœuds au cerveau.
Je te propose donc tout simplement :
$tab = array(); $sql2 = "SELECT promo, nom_matiere FROM promo_matiere"; if($result2 = mysqli_query($link, $sql2)) { if(mysqli_num_rows($result2) > 0) { while($row2 = mysqli_fetch_assoc($result2)) { // On récupère les valeurs $promo = promoActuelle($row2["promo"]); $matiere = $row2["nom_matiere"]; // On crée le sous tableau la première fois qu'on rencontre cette promo if (!isset($tab[$promo])) $tab[$promo] = array(); // On insère la matière dans le tableau voulu. $tab[$promo][] = $matiere; } } } foreach ($tab as $promo => $matieres) { echo "<b>Promo $promo</b><br />"; foreach ($matieres as $matiere) { echo $matiere . "<br/>"; } }
Xavier
J'ai rarement eu une aussi belle réponse. Ca répond parfaitement a mon besoin et j'ai appris pleins de truc !
Merci encore
J'ai essayé ce code mais ca ne fonctionne pas comme je le voudrais...
Une idée?
En effet, c'est à cause de ces lignes :
Tu testes sur $tab mais tu modifies $tab2.
Xavier