Bonjour, je réalise un petit site d'actualité sur toutes les series en regroupant les épisodes, les saisons, et la série en question.

Je bloque sur une jointure, ou je dois récupérer chaque épisode en fonction de la saison, de la série et bien faire correspondre l'épisode à la saiso et la série en en question.

Une serie sur mon site se presente comme ceci :
serie.php?id=2 et sur le coté j'ai les blocs (saison 1, saison 2 etc.) et dedans les blocs des saisons j'ajoute les épisodes. Ensuite j'afficherais une description et des commentaires sur chaque épisode mais je suis pas encore ici.

Le problème c'est que mon système d'ajout des saisons fonctionnes très bien mais quand je veux ajoutez un épisode dans mon bloc de saison, soit il m'affiche plusieurs fois sur chaque bloc de saison qui correspond pas, soit c'est vide, soit il fait pas la distinction des séries serie.php?id=2 serie.php?id=3

J' ai 3 table : LA TABLE episode :

LA TABLE serie !

la table saison ensuite voilà ma fonction qui plante

function recupepisode_chaque_serie()
{
global $dbh;

$votresepisode = array();
  $id = (htmlentities($_GET['id']));
  $query = $dbh->prepare('SELECT episode.episode, serie.nomserie
    FROM episode, saison, serie
     WHERE episode.id_saison     = saison.id  AND
     episode.id_serie  = serie.id   AND
    id_serie= :id 

');
   $query->execute(array('id' => $_GET['id']));
 return $query->fetchAll();

}

ET voici mon php sur ma vue pour afficher les episodes en fonction des saisons :


  <?php

if ($votresaison == true)
{
foreach($votresaison as $votresaisons)
{
?>

<div class="menudroite"> 
<div class="menunom"> <div class="menuo"><?php echo $votresaisons['saison']; ?></div></div>
<div class="borduremenudroite">
<ul id="navigation">
  <?php

if ($votresepisode == true)
{
foreach($votresepisode as $votresepisodes)
{
?>

  <li><a href="#" title="aller à la section 1"><?php echo $votresepisodes['episode']; ?> </a></li>

   <?php
}
}
else 

{
echo '';
}
?>

</ul>
</div>
</div>
   <?php
}
}
else 

{
echo '';
}
?>

7 réponses


Serg77
Auteur

Voici ma nouvelle jointure qui fonctionne :

function recupepisode_chaque_serie()
{
global $dbh;

$votresepisode = array();
$id = (htmlentities($_GET['id']));
$query = $dbh->prepare('SELECT * FROM serie ser
INNER JOIN saison sai ON ser.id = sai.id_serie
INNER JOIN episode epi ON ser.id = epi.id_serie AND sai.id = epi.id_saison
WHERE ser.id = :id ');
$query->bindParam('id', $id);
$query->execute();
return $query->fetchAll();

}

Il fait bien la différente entre les séries, maintenant. Mais le problème c'est que si j'ajoute une saison par exemple saison 25 et que j'ajoute un épisode (le 23 par exemple) il va me mettre dans mon block saison 25.

Mais à chaque fois que je fais une nouvelle saison (la 26 par exemple) il m'ajoute la valeur 23 . Je présise que j'ai rien dans la bdd j'ai que 1 épisode.

C'est ma vue qui déconne je crois mais j'arrive pas à l'adapter :(.

Bonjour,

est-ce que tu veux vraiment garder trois tables ? Car selon moi deux tables suffisent amplement : series et episodes; au passage pour les noms de table c'est une bonne façon de faire de mettre les nom au pluriel puisqu'elles contiennent plusieurs lignes.

Après si tu veux vraiment rester sur trois tables, remplaces les "INNER JOIN" par des "LEFT JOIN"

Bon courage

Serg77
Auteur

Salut Connected, j'ai fais une nouvelle jointure regarde le poste juste en haut, elle fonctionne bien sauf que j'ai un problème avec ma vue (mes foreachs).

Si j'ajoute un épisode dans une saison par exemple l'épisode 22 dans la saison 5, là c'est OK TOUT EST ok mais quand je vais faire une nouvelle saison il va automatiquement m'ajouté l'épisode 22. Alors que c'est pas ça que je veux . Et je pense que ça vient de mon foreach que je n'arrive pas à addapter.

Dans la bdd pourtant que j'ai que un épisode.

Oui, j'ai bien lu... C'est tout simplement que ta requête récupère trop de lignes, d'où ma réponse précédente : remplacer les "INNER JOIN" par des "LEFT JOIN". Essaye et dis moi ce que ça te donne.

Serg77
Auteur

D'accord, je viens d'optenir le même résultat que si j'ajoute INNER JOIN, je présise que j'ai vidé mes tables avant de faire mon test.

Serg77
Auteur

Des idées de comment je pourrai faire ?

Dans ta vue,
qu'est que tu as dans les variables $votresaison et $votreepisode ? Tu fais des tests pour savoir si elles sont égales à true pourquoi ?