Plusieurs lignes de table SQL dans une ligne de tableau de données
Bonjour.
C'est peut-être le syndrome du vendredi mais je ne trouve pas la bonne manière de présenter mes données.
Soit une fonction dans le modèle qui retourne le résultat d'une requête.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public function listeStages()
{
$sql = "
SELECT sn.ssn_id, sn.ssn_code, sn.ssn_libelle,
sn.ssn_date_debut, sn.ssn_date_fin, sn.ssn_capacite,
st.stg_id_etablissement, st.stg_id_conseiller_pedago,
e.etb_nom,
c.cmn_id, c.cmn_nom,
p.prs_nom, p.prs_prenom,
d.dsc_id, d.dsc_nom
FROM th_stage_stg st
INNER JOIN te_session_ssn sn ON sn.ssn_id = st.stg_id_session
INNER JOIN te_personne_prs p ON p.prs_id = st.stg_id_conseiller_pedago
INNER JOIN te_etablissement_etb e ON e.etb_id = st.stg_id_etablissement
INNER JOIN tr_commune_cmn c ON c.cmn_id = e.etb_id_commune
INNER JOIN tj_stg_concerner_dsc_scd sc ON sc.scd_id_stage = st.stg_id_session
INNER JOIN te_discipline_dsc d ON d.dsc_id = sc.scd_id_discipline
";
return $this->_db->fetchAll($sql);
} |
Comme un stage peut couvrir plusieurs disciplines, je peux avoir plusieurs lignes de résultat pour un stage.
Maintenant, je veux présenter les données de ce résultat de requête dans le tableau de données d'une vue :
Code:
1 2 3 4 5 6 7 8 9 10 11
| <table>
<tr>
<th>Code</th>
<th>Libellé</th>
<th>Dates</th>
<th>Établissement</th>
<th>Conseiller prédagogique</th>
<th>Discipline(s) couverte(s)</th>
<th> </th>
</tr>
<?php foreach($this->stages as $stage) : ?> |
Et là je coince sur la manière de faire en sorte qu'un stage ne prenne qu'une ligne de mon tableau en rassemblant toutes les disciplines du stage séparées par des virgules, de la forme "Physique, Chimie".
J'ai commencé à faire ce genre de truc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?php
if($id_prec != $stage['ssn_id'])
{
// Nouveau stage à traiter
$disciplines = $this->escape($stage['dsc_nom']);
$newline = 1;
}
else
{
// Stage multi-disciplines
$disciplines .= ', '.$this->escape($stage['dsc_nom']);
$newline = 0;
}
?>
<?php if($newline == 1) : ?>
<tr>
<td><?php echo $this->escape($stage['ssn_code']); ?></td>
<td><?php echo $this->escape($stage['ssn_libelle']); ?></td>
<td>Du :
<?php echo $this->escape($stage['ssn_date_debut']); ?><br />
Au :
<?php echo $this->escape($stage['ssn_date_fin']); ?>
</td>
<td>
<?php echo $this->escape($stage['etb_nom']); ?> (
<?php echo $this->escape($stage['cmn_nom']); ?>)
</td>
<td>
<?php echo $this->escape($stage['prs_prenom']); ?>
<?php echo $this->escape($stage['prs_nom']); ?>
</td>
<td>
<?php endif; ?>
<?php echo $this->escape($disciplines); ?> |
Et là il faut que je passe à l'instance suivante du foreach pour éventuellement compléter la cellule accueillant les disciplines. Mais si le stage n'a qu'une discipline, je n'ai pas encore changé de ligne de tableau et les données vont se mélanger. :calim2: