Récupérer plusieurs données du même index (clé étrangère) php

Fermé
RichieZz Messages postés 17 Date d'inscription mardi 21 mai 2019 Statut Membre Dernière intervention 6 juin 2019 - 28 mai 2019 à 16:24
RichieZz Messages postés 17 Date d'inscription mardi 21 mai 2019 Statut Membre Dernière intervention 6 juin 2019 - 29 mai 2019 à 09:57
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!
A voir également:

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
28 mai 2019 à 16:37
(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
1
RichieZz Messages postés 17 Date d'inscription mardi 21 mai 2019 Statut Membre Dernière intervention 6 juin 2019
Modifié le 28 mai 2019 à 16:48
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.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
28 mai 2019 à 17:07
À mon avis le problème vient de tes données. Les clefs étrangères sont bien égales ? Peux-tu nous en montrer un extrait qui contient des lignes qui n'apparaissent pas alors qu'elles le devraient ?
0
RichieZz Messages postés 17 Date d'inscription mardi 21 mai 2019 Statut Membre Dernière intervention 6 juin 2019
28 mai 2019 à 17:15




voila je t'ai envoyé l'image de ma table et l'image de ma contrainte ce sont des captures d'écrans.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
28 mai 2019 à 17:26
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
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
28 mai 2019 à 17:28
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
0