Comment ajouter des colonnes dans un tableau mysql trié

Résolu/Fermé
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 - 24 janv. 2017 à 14:49
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 - 26 janv. 2017 à 15:46
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).

$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:

3 réponses

yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 Ambassadeur 1 557
Modifié par yg_be le 24/01/2017 à 19:42
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>';
		}
	}
1
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
26 janv. 2017 à 12:08
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
$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
0
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 1 557
26 janv. 2017 à 12:49
Je ne comprends toujours pas ceci : "WHERE taxabase1.Rk_Hist and" : que veux-tu faire?
0
yg_be Messages postés 23412 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 décembre 2024 1 557
26 janv. 2017 à 12:54
L'erreur est dans l'utilisation de l'index pour $Original_array: cela doit être de 0 à 3, pas de 1 à 4. Essaye après avoir corrigé cela.
0
Sebas22 Messages postés 110 Date d'inscription jeudi 13 mai 2010 Statut Membre Dernière intervention 24 juillet 2018 5
26 janv. 2017 à 15:46
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
0