Concaténation conditionnelle d'un champ d'une table

Eléphanteau du PHP | 15 Messages

05 avr. 2006, 10:15

Bonjour,

J'ai dans une table des enregistrements similaires ou seul le contenu d'un champ diverge.

J'aimerais pouvoir, à l'affichage du tableau, pouvoir concaténer, tous les champs divergeants pour n'afficher qu'une seule ligne au lieu de deux ou trois pour chaque enregistrement semblable !

exemple :
Da.1 | Da.2 | Iden. | Code (structure de la table)
12.4 | 12.4 | AAAA | ZUIO
12.4 | 12.4 | AAAA | BCDE
12.4 | 12.4 | ABBB | ZUIO (Contenu de la table)
12.4 | 13.4 | ACCC | ZUIO
12.4 | 13.4 | ACCC | BGDE
12.4 | 13.4 | ACCC | XYZ0

Affichage écran
Da.1 | Da.2 | Iden. | Code
12.4 | 12.4 | AAAA | ZUIO / BCDE
12.4 | 12.4 | ABBB | ZUIO
12.4 | 13.4 | ACCC | ZUIO / BGDE / XYZ0

En complément si les champs Da.1, Da.22 et Iden. sont équivalents, il faudrait concaténer les champs Code.

Est-ce réalisable ? Si oui comment ?

Je ne sais pas si je dois faire cela lors de la requête SQL (MySQL) ou gérer le tableau obtenu par la requête en PhP !

Merci beaucoup de vos suggestions

Bien cordialement
Gecko

Eléphant du PHP | 451 Messages

05 avr. 2006, 10:30

Ben tu te fais un truc du genre :

Da.1 | Da.2 | Iden. | Code (structure de la table)
12.4 | 12.4 | AAAA | ZUIO
12.4 | 12.4 | AAAA | BCDE
12.4 | 12.4 | ABBB | ZUIO (Contenu de la table)
12.4 | 13.4 | ACCC | ZUIO
12.4 | 13.4 | ACCC | BGDE
12.4 | 13.4 | ACCC | XYZ0
$memcle="";
for (boucle lecture de table) {
$cle=$Da1." | ".$Da2." | ".$Iden." - ";
if ($memcle != $cle) {
   if ($memcle != "") {
      echo "<BR>".$memcle.$val;
   }
   $memcle=$cle;
   $val=$code;
}
else {
   $val=$val." / ".$code;
}
}
echo "<BR>".$memcle.$val;
Il y a peut être plus simple mais ça devrait marcher...
Modifié en dernier par jpaul le 05 avr. 2006, 11:19, modifié 1 fois.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 avr. 2006, 10:40

Il y a des balises
 plutôt que [code] pour du PHP

Si tu pouvais éditer ton message ce serait cool

Mammouth du PHP | 768 Messages

05 avr. 2006, 11:09

http://www.phpscripts-fr.net/forum1/lire.php?id=114454

p't'etre avec un mix des deux forums, tu vas y arriver :wink:
M A R I O
Si une patte de lapin porte bonheur, qu'a-t-il bien pu arriver au lapin ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 avr. 2006, 11:13

http://www.phpscripts-fr.net/forum1/lire.php?id=114454
p't'etre avec un mix des deux forums, tu vas y arriver :wink:
Peut-être aussi qu'un seul aurait suffit... poster 2 messages sur des forums différents au même moment c'est faire preuve de beaucoup d'impatience et de bien peu de confiance envers les autres membres

La prochaine fois attend un peu, ça évitera de faire travailler des personnes pour rien ;)

Eléphanteau du PHP | 15 Messages

13 avr. 2006, 00:47

Grâce à votre aide et à celle d'autres gentils programmeurs sur d'autres Forum j'ai trouvé une solution. La voici (elle sera peut-être utile à d'autre béotiens). Merci beaucoup à tous.
// Afficher tous les enregistrements.
$compteur=1;  //compte le nombre d'absence
$save_row = mysql_fetch_assoc($result); //sauvegarde le premier élément de la liste
while ($row = mysql_fetch_assoc($result)) {
  if (($save_row[DateDebu] == $row[DateDebu]) and ($save_row[DateFini] == $row[DateFini]) and ($save_row[MaitreAbsent] == $row[MaitreAbsent]))
    {
        $row[Remplacant] = $save_row[Remplacant].' / '.$row[Remplacant]; // concatène les remplaçants pour le même remplacement
    } else { // affiche les éléments concaténés et les autres
       echo '<tr><td align="center" width="auto">'.stripslashes($save_row[DateDebu]).'</td>
	<td align="center" width="auto">'.stripslashes($save_row[DateFini]).'</td>
	<td align="center" width="auto">'.stripslashes($save_row[Raison]).'</td>
	<td align="left" width="auto">'.stripslashes($save_row[MaitreAbsent]).'</td>
	<td align="left" width="auto">'.stripslashes($save_row[Remplacant]).'</td></tr>';
	$compteur = $compteur + 1; // ajoute 1 au nombre d'absences
    }	//end if		
    $save_row = $row;
  }	  // end while  --> il faut encore afficher le dernier élément
  echo '<tr><td align="center" width="auto">'.stripslashes($save_row[DateDebu]).'</td>
    <td align="center" width="auto">'.stripslashes($save_row[DateFini]).'</td>
    <td align="center" width="auto">'.stripslashes($save_row[Raison]).'</td>
    <td align="left" width="auto">'.stripslashes($save_row[MaitreAbsent]).'</td>
    <td align="left" width="auto">'.stripslashes($save_row[Remplacant]).'</td></tr></table>';
Gecko