Récupérer plusieurs données du même index (clé étrangère) php
RichieZz
Messages postés
18
Statut
Membre
-
RichieZz Messages postés 18 Statut Membre -
RichieZz Messages postés 18 Statut Membre -
Bonjour,
je travail actuellement sur un projet, pour ce dernier j'ai créé 3 tables (formation, items qui a une jointure avec formation et sous_items qui a une jointure avec items). J'ai créé un tableau comportant mes formations, les items qui leurs correspondent et les sous items qui leurs correspond. Mais ce tableau ne récupère qu'une seule ligne du tableau item par formation alors que certaines formation en ont plusieurs et je n'arrive pas à récupérer toutes les lignes correspondantes.
Voila mon code:
<?php
function formations(PDO $bdd) {
// La requete de base
$query = "SELECT * FROM sous_items, items, formation WHERE formation.form_id=items.form_id and items.item_id=sous_items.item_id";
// On récupère tout le contenu de la table
$resultat = $bdd->query($query);
return $resultat->fetchAll(PDO::FETCH_OBJ);
}
$form_id='';
$formations = formations($bdd);
if ($formations) {
?>
<table align="center" border="1">
<?php
foreach ($formations as $formation) {
?>
<thead>
<tr>
<th>form_id</th>
<th>form_titre</th>
<th>form_nb_jour</th>
<th>form_reference</th>
<th>form_prix</th>
<th>form_objectifs</th>
<th>form_participants</th>
<th>form_prerequis</th>
<th>items</th>
<th>sous_items</th>
</tr>
</thead>
<tbody>
<tr>
<td><?=$formation->form_id?></td>
<td><?=$formation->form_titre?></td>
<td><?=$formation->form_nb_jour?></td>
<td><?=$formation->form_reference?></td>
<td><?=$formation->form_prix?></td>
<td><?=$formation->form_objectifs?></td>
<td><?=$formation->form_participants?></td>
<td><?=$formation->form_prerequis?></td>
<td><?=$formation->item_titre?></td>
<td><?=$formation->sous_items_titre?></td>
</tr>
</tbody>
Comment dois-je faire pour pouvoir récupérer tous mes items et qu'ils s'affichent dans la même case du tableau avec un saut de ligne à chaque fois?
Merci d'avance pour votre aide!
je travail actuellement sur un projet, pour ce dernier j'ai créé 3 tables (formation, items qui a une jointure avec formation et sous_items qui a une jointure avec items). J'ai créé un tableau comportant mes formations, les items qui leurs correspondent et les sous items qui leurs correspond. Mais ce tableau ne récupère qu'une seule ligne du tableau item par formation alors que certaines formation en ont plusieurs et je n'arrive pas à récupérer toutes les lignes correspondantes.
Voila mon code:
<?php
function formations(PDO $bdd) {
// La requete de base
$query = "SELECT * FROM sous_items, items, formation WHERE formation.form_id=items.form_id and items.item_id=sous_items.item_id";
// On récupère tout le contenu de la table
$resultat = $bdd->query($query);
return $resultat->fetchAll(PDO::FETCH_OBJ);
}
$form_id='';
$formations = formations($bdd);
if ($formations) {
?>
<table align="center" border="1">
<?php
foreach ($formations as $formation) {
?>
<thead>
<tr>
<th>form_id</th>
<th>form_titre</th>
<th>form_nb_jour</th>
<th>form_reference</th>
<th>form_prix</th>
<th>form_objectifs</th>
<th>form_participants</th>
<th>form_prerequis</th>
<th>items</th>
<th>sous_items</th>
</tr>
</thead>
<tbody>
<tr>
<td><?=$formation->form_id?></td>
<td><?=$formation->form_titre?></td>
<td><?=$formation->form_nb_jour?></td>
<td><?=$formation->form_reference?></td>
<td><?=$formation->form_prix?></td>
<td><?=$formation->form_objectifs?></td>
<td><?=$formation->form_participants?></td>
<td><?=$formation->form_prerequis?></td>
<td><?=$formation->item_titre?></td>
<td><?=$formation->sous_items_titre?></td>
</tr>
</tbody>
Comment dois-je faire pour pouvoir récupérer tous mes items et qu'ils s'affichent dans la même case du tableau avec un saut de ligne à chaque fois?
Merci d'avance pour votre aide!
1 réponse
-
(Re)bonjour,
Je suis surpris que ta requête ne te donne qu'une seule ligne item pour chaque formation, cela ne devrait pas être le cas.
Es-tu sûr de tes données ?
As-tu essayé d'exécuter la requête directement dans ton environnement SQL (via phpMyAdmin, par exemple) ?
Xavier-
je viens d'aller essayer et cela me donne seulement les 4 premiers items que j'avais rentrer dans ma bdd (1 item par formation) et les autres n’apparaissent pas dans le tableau. Je n'arrive pas à trouver la raison.
Vous pouvez toujours essayer de copié collé mon code si vous pensez que c'est un bug de mon pc mais cela m'étonnerai. Je ne vois pas d'erreur le code est correct il me semble mais mes items supplémentaires n'apparaissent pas et pourtant si je fais une requête pour lire ma table items ils apparaissent tous alors je ne sais pas si c'est un problème de conditions ou pas. -
-
-
Je suis perplexe.
Bon personnellement, je ne suis pas fan de cette façon d'écrire des jointures, mais je ne pense pas que ça soit la source du problème... Essaie toujours comme ça, sait-on jamais :SELECT formation.*, i.item_titre, si.sous_items_titre FROM formation f INNER JOIN items i ON i.form_id = f.form_id INNER JOIN sous_items si ON si.item_id = i.item_id
Xavier -
Ah, mais attends ! Peut-être n'as-tu pas de Sous_items !
Auquel cas la jointure ne renverra rien...
Si tel est le cas, écris plutôt :SELECT formation.*, i.item_titre, si.sous_items_titre FROM formation f INNER JOIN items i ON i.form_id = f.form_id LEFT OUTER JOIN sous_items si ON si.item_id = i.item_id
-