Comment ajouter des colonnes dans un tableau mysql trié
Résolu
Sebas22
Messages postés
110
Date d'inscription
Statut
Membre
Dernière intervention
-
Sebas22 Messages postés 110 Date d'inscription Statut Membre Dernière intervention -
Sebas22 Messages postés 110 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Nous reprenons un chantier en cours pour notre association (1901) mais nos connaissances en PHP MySql restent limitées.
Donc on fait appel à votre aide, une dernière fois (c’était juste un reliquat avant production).
Dans un fil précédent nous avons pu finaliser la création d'un tableau à 2 colonnes (c'était un souci de requête, pas de code php), mais en fait le tableau doit en compter 5 (donc le code php doit être complété), les 3 nouvelles venant à droite des 2 colonnes (donc sans impacter le tri qui se fait sur les 2 premières colonnes)
Voici le code avec les 2 colonnes, dans lequel j’ai ajouté les 3 nouveaux champs de taxabase3 dans la requête et les 3 nouvelles variables dans le ‘echo’ final.
Le problème c’est que je ne comprend pas du tout le code php et que donc je ne sais pas ajouter le code pour les 3 nouvelles colonnes.
Donc votre aide (selon mes souhaits !) peut consister à proposer un code plus simple avec 5 colonnes qui fasse le job ou bien à me piloter dans l’ajout d’une 3ème colonne à droite selon le présent codage (ce qui, après avoir compris la logique, me permettra de coder l’adaptation à 5 colonnes).
Merci d’avance
Seb
Nous reprenons un chantier en cours pour notre association (1901) mais nos connaissances en PHP MySql restent limitées.
Donc on fait appel à votre aide, une dernière fois (c’était juste un reliquat avant production).
Dans un fil précédent nous avons pu finaliser la création d'un tableau à 2 colonnes (c'était un souci de requête, pas de code php), mais en fait le tableau doit en compter 5 (donc le code php doit être complété), les 3 nouvelles venant à droite des 2 colonnes (donc sans impacter le tri qui se fait sur les 2 premières colonnes)
Voici le code avec les 2 colonnes, dans lequel j’ai ajouté les 3 nouveaux champs de taxabase3 dans la requête et les 3 nouvelles variables dans le ‘echo’ final.
Le problème c’est que je ne comprend pas du tout le code php et que donc je ne sais pas ajouter le code pour les 3 nouvelles colonnes.
Donc votre aide (selon mes souhaits !) peut consister à proposer un code plus simple avec 5 colonnes qui fasse le job ou bien à me piloter dans l’ajout d’une 3ème colonne à droite selon le présent codage (ce qui, après avoir compris la logique, me permettra de coder l’adaptation à 5 colonnes).
$requete = $connexion->prepare("SELECT Original_name, Describer_initials, Year, Validity, Trinominal_name FROM taxabase1 left outer join taxabase3 on (taxabase1.Rk_Hist = taxabase3.Rk_Hist) WHERE taxabase1.Rk_Hist and Describer_initials is not null and trim(Describer_initials) != '' ORDER BY Describer_initials, Original_name"); $requete->bindParam(':Rk_Hist', $Rk_Hist, PDO::PARAM_INT); $requete->execute(); $result[1] = $requete->fetchAll(); $plan3 = ''; $tabCurrent_name_by_describer = array(); foreach ($result[1] as $row) { $plan3 = explode("|", $row["Describer_initials"]); foreach ($plan3 as $cellplan3){ $tabCurrent_name_by_describer[$cellplan3][] = $row["Original_name"]; } } ksort($tabCurrent_name_by_describer); foreach($tabCurrent_name_by_describer as $describer => $tabOriginal_name){ foreach($tabOriginal_name as $Original_name){ echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $Original_name . '</i></td><td>'. $Year . '</td>><td>'. $Validity . '</td>><td>'. $Trinominal_name . '</td></tr>'; } }
Merci d’avance
Seb
A voir également:
- Comment ajouter des colonnes dans un tableau mysql trié
- Trier un tableau excel - Guide
- Tableau word - Guide
- Comment faire des colonnes sur word - Guide
- Tableau ascii - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir, Je propose ceci:
$requete = $connexion->prepare("SELECT Original_name, Describer_initials, Year, Validity, Trinominal_name FROM taxabase1 left outer join taxabase3 on (taxabase1.Rk_Hist = taxabase3.Rk_Hist) WHERE taxabase1.Rk_Hist and Describer_initials is not null and trim(Describer_initials) != '' ORDER BY Describer_initials, Original_name"); $requete->bindParam(':Rk_Hist', $Rk_Hist, PDO::PARAM_INT); $requete->execute(); $result[1] = $requete->fetchAll(); $plan3 = ''; $tabCurrent_name_by_describer = array(); foreach ($result[1] as $row) { $plan3 = explode("|", $row["Describer_initials"]); foreach ($plan3 as $cellplan3) { tabCurrent_name_by_describer[$cellplan3][] = array($row["Original_name"], $row["Year"], $row["Validity"], $row["Trinominal_name"]); } } ksort($tabCurrent_name_by_describer); foreach($tabCurrent_name_by_describer as $describer => $tabOriginal_name) { foreach($tabOriginal_name as $Original_array) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $Original_array[1] . '</i></td><td>'. $Original_array[2] . '</td>><td>'. $Original_array[3] . '</td>><td>'. $Original_array[4] . '</td></tr>'; } }
Bonjour,
Merci beaucoup.
Et en plus c’est très clair et organisé si bien que je vois bien comment le code précédent faisait sens.
Cependant j’ai travaillé hier dessus car il y a un petit souci (en plus d’une broutille : $tabCurrent_name_by_describer[$cellplan3][] le $ manquait et je l’ai vite vu).
J’ai essayé plein de trucs, mais cela n’a pas marché (peut-être le nez dans le guidon) et pourtant la construction du code est limpide… juste une hypothèse, entre le vieux et le nouveau code la différence est à array($row["Original_name"], $row["Year_description"], $row["Current_status"], $row["Current_trinom_name"]);.
L’erreur dans localhost à chaque ligne est
Notice: Undefined offset: 4 in D:\_etc.php on line 105
Ligne 105:
'</td>><td>'. $Original_array[4] .
Il semblerait que le code tel quel ne prenne pas le champ Original_name (2ème colonne), prend bien la variable describer dérivée du champ Describer_initials, puis les champs Year_description, Current_status, Current_trinom_name, ce qui entraîne un décalage car ce n’est pas le champ Original_name qui est en italique (il manque) mais le champ suivant Year_description
Ainsi après le message d’erreur, il y a (pour la première occurrence)
Able K.W.(en gras, OK)Z1988(en italique, faux)valid sp.>Fundulus relictus>
J’ai ajouté les commentaires et le Z pour signaler l’absence du champ Original_name
Pour faciliter je cite le code après que j’y ai mis les noms de champs et la jointure exacts
Voilà je pense qu’on est tout près du but, merci encore.
A+
Seb
Merci beaucoup.
Et en plus c’est très clair et organisé si bien que je vois bien comment le code précédent faisait sens.
Cependant j’ai travaillé hier dessus car il y a un petit souci (en plus d’une broutille : $tabCurrent_name_by_describer[$cellplan3][] le $ manquait et je l’ai vite vu).
J’ai essayé plein de trucs, mais cela n’a pas marché (peut-être le nez dans le guidon) et pourtant la construction du code est limpide… juste une hypothèse, entre le vieux et le nouveau code la différence est à array($row["Original_name"], $row["Year_description"], $row["Current_status"], $row["Current_trinom_name"]);.
L’erreur dans localhost à chaque ligne est
Notice: Undefined offset: 4 in D:\_etc.php on line 105
Ligne 105:
'</td>><td>'. $Original_array[4] .
Il semblerait que le code tel quel ne prenne pas le champ Original_name (2ème colonne), prend bien la variable describer dérivée du champ Describer_initials, puis les champs Year_description, Current_status, Current_trinom_name, ce qui entraîne un décalage car ce n’est pas le champ Original_name qui est en italique (il manque) mais le champ suivant Year_description
Ainsi après le message d’erreur, il y a (pour la première occurrence)
Able K.W.(en gras, OK)Z1988(en italique, faux)valid sp.>Fundulus relictus>
J’ai ajouté les commentaires et le Z pour signaler l’absence du champ Original_name
Pour faciliter je cite le code après que j’y ai mis les noms de champs et la jointure exacts
$requete = $connexion->prepare("SELECT Original_name, Year_description, Current_status, Current_trinom_name, Describer_initials FROM taxabase1 left outer join taxabase2 on (taxabase1.Rk_Hist = taxabase2.Rk_Hist) left outer join taxabase3 on (taxabase3.Rk_Hist = taxabase2.Rk_Hist) WHERE taxabase1.Rk_Hist and Describer_initials is not null and trim(Describer_initials) != '' ORDER BY Describer_initials, Original_name"); $requete->bindParam(':Rk_Hist', $Rk_Hist, PDO::PARAM_INT); $requete->execute(); $result[1] = $requete->fetchAll(); $plan3 = ''; $tabCurrent_name_by_describer = array(); foreach ($result[1] as $row) { $plan3 = explode("|", $row["Describer_initials"]); foreach ($plan3 as $cellplan3) { $tabCurrent_name_by_describer[$cellplan3][] = array($row["Original_name"], $row["Year_description"], $row["Current_status"], $row["Current_trinom_name"]); } } ksort($tabCurrent_name_by_describer); foreach($tabCurrent_name_by_describer as $describer => $tabOriginal_name) { foreach($tabOriginal_name as $Original_array) { echo '<tr><td><b>' . $describer . '</b></td><td><i>'. $Original_array[1] . '</i></td><td>'. $Original_array[2] . '</td>><td>'. $Original_array[3] . '</td>><td>'. $Original_array[4] . '</td></tr>'; } }
Voilà je pense qu’on est tout près du but, merci encore.
A+
Seb
Re-bonjour,
Super!
L'erreur était bien dans l'utilisation de l'index pour $Original_array: plutôt de 0 à 3.
Mercis!!!
J'ai pu dans la foulée réaliser 6 autres pages similaires avec 3 et 4 colonnes.
On va rentrer en prod finale et mettre le site en ligne très bientôt.
Je marque comme résolu (avec un chapeau bas à toi, yg_be)
Seb
Super!
L'erreur était bien dans l'utilisation de l'index pour $Original_array: plutôt de 0 à 3.
Mercis!!!
J'ai pu dans la foulée réaliser 6 autres pages similaires avec 3 et 4 colonnes.
On va rentrer en prod finale et mettre le site en ligne très bientôt.
Je marque comme résolu (avec un chapeau bas à toi, yg_be)
Seb