probleme foreach ou autre

Par nox979, il y a 10 ans


Voila je rencontre un petit problème avec mon code. et j'arrive pas a trouver la solution ,
jespere que vous pouriez m'aider
je cree un site avec des films qui son lier a des acteurs et des genres
mon probleme cest que quand je mets 2 genres ou 2 acteur sur un film il me rajoute 2x le film sur ma liste
je vous donne une image pour mieux comprendre :
![](http://hpics.li/7a421d6) avec mes tables

je vous donne aussi mon code :

<?php $page ="film"; include ("Db.php"); include ("connect.php"); $sqlgenres = "SELECT * FROM genre ORDER BY id_genre DESC "; $genres = Db::getResult($sqlgenres); $sqlfilms = "SELECT film.nom_fr, film.photo, genre_film.film_genre_genre_id, genre.genre_fr, film.id_film FROM film LEFT JOIN genre_film ON genre_film.film_genre_genre_id = film.genre LEFT JOIN genre ON genre.id_genre = genre_film.id_genre_id"; $filmes = Db::getResult($sqlfilms); <div class="filter" id="filter"> <h1>genre : </h1> <select size="1" class="filters-select" > <option value="*">ALL</option> <?php foreach ($genres as $genre){ ?> <option value=".<?php echo $genre['id_genre']; ?>" ><?php echo $genre['genre_fr']; ?></option> <?php } ?> </select> <div class="chercher ui-widget"> <h1>Cherchez</h1> <form name="autopopulate" method="post" action=""> <input type="text" class="quicksearch" placeholder="Cherchez" id="tags" name="tags" > </form> </div> </div> </div> <div class="content grid" id="container"> <?php foreach ($filmes as $film){ ?> <div class="block <?php echo $film['genre_fr']; ?>" data-category="<?php echo $film['genre_fr']; ?>"> <h1><?php echo $film['nom_fr']; ?></h1> <img src="image.php/<?php echo $film['photo']; ?>?width=500&height=500&cropratio=1:1&image=/www/Cinema_World-HTML5/jaquette/<?php echo $film['photo']; ?>" alt=""> <a rel="prettyPhoto" href="detail.php?id=<?php echo $film['id_film']; ?>&iframe=true&width=100%&height=80%" class="info">Info...</a> </div> <?php } ?>

11 réponses

TrimA74, il y a 10 ans

Il faut que tu fasses 2 requêtes, tu ne peux pas récupérer plusieurs genre d'un même film sur une même requête sql.

TrimA74, il y a 10 ans
$sqlfilms = "SELECT DISTINCT film.nom_fr, film.photo, genre_film.film_genre_genre_id, genre.genre_fr, film.id_film FROM film LEFT JOIN genre_film ON genre_film.film_genre_genre_id = film.genre LEFT JOIN genre ON genre.id_genre = genre_film.id_genre_id";

Tu as essayé un distinct dans le select ?

nox979, il y a 10 ans

oui tout a fait , cela fonctionne mais apres quand je filtre sur le 2 eme genre ya plus rien,
et comme vous savez les film on plusieures genres et d'acteurs

TrimA74, il y a 10 ans

Comment ça filtrer sur le 2ème genre ? Il n'y a pas de clause WHERE dans ta requête, je comprends pas trop

Huggy, il y a 10 ans

C'est normal que ta requête affiche plusieurs fois le film s'il a plusieurs genres
maintenant soit tu fais une seconde requête uniquement sur films ou bien tu filtres dans le foreach avec une variable qui mémorise la valeur précédente, si le film change tu l'affiches sinon tu l'ignores

nox979, il y a 10 ans

voila j'ai su faire ca mais j'ai toujours un probleme ...
sur l'image que je vous montre il ya des numero dans les .block qui correspond a 1 genre
le :
1 = Action
2 = fantastique
3 = autre
4 = autre

Le probleme cest que le premier film contien le 1 - 2
et le 2,3 et 4 eme film ne contien pas le genre 1 et 2 et la comme vous le voyer il me let mets quand meme ...
si vous avez une solution je suis preneur
http://www.hostingpics.net/viewer.php?id=805069Sanstitre.png
pour mon code que j'ai ajouter:

$sqlfilms = "SELECT DISTINCT film.nom_fr, film.photo, genre_film.film_genre_genre_id, genre.genre_fr, genre_film.id_genre_film, genre_film.id_genre_id, genre.id_genre, film.annee, film.info_fr, film.genre, film.acteur_1, film.duree, film.pays, film.id_film FROM film LEFT JOIN genre_film ON genre_film.film_genre_genre_id = film.genre LEFT JOIN genre ON genre.id_genre = genre_film.id_genre_id GROUP BY film.id_film "; $filmes = Db::getResult($sqlfilms); $outgenre =''; <div class="content grid" id="container"> <?php foreach ($filmes as $film){ ?> <div class="block <?php $outgenre .= $film['id_genre'].' '; echo $outgenre; ?>" data-category=" <?php $outgenre .= $film['id_genre'].' '; echo $outgenre; ?>"> <h1><?php echo $film['nom_fr']; ?></h1> <img src="image.php/<?php echo $film['photo']; ?>?width=500&height=500&cropratio=1:1&image=/www/Cinema_World-HTML5/jaquette/<?php echo $film['photo']; ?>" alt=""> <a rel="prettyPhoto" href="detail.php?id=<?php echo $film['id_film']; ?>&iframe=true&width=100%&height=80%" class="info">Info...</a> </div> <?php } ?>
Huggy, il y a 10 ans

Ton modèle conceptuel de données n'est pas bon
Dans la table film tu ne devrais pas avoir les champs 'genre' et 'acteur_1'
par contre dans les tables d'association genre_film ou acteur_film, tu dois récupérer les clés primaires des tables associées
par exemple pour genre_film tu dois avoir comme clés externes id_genre et id_film

nox979, il y a 10 ans

si je comprend bien :

$sqlfilms = "SELECT * FROM film"; $filmes = Db::getResult($sqlfilms); $sqlgenres = "SELECT genre_film.film_genre_genre_id, genre_film.id_genre_film, genre_film.id_genre_id, genre.id_genre, film.id_film, film.genre FROM film LEFT JOIN genre_film ON genre_film.film_genre_genre_id = film.genre LEFT JOIN genre ON genre.id_genre = genre_film.id_genre_id "; $genres = Db::getResult($sqlgenres);

mais comment je vais le mettre dans mon foreach de film?

`` <?php foreach ($filmes as $film){ ?>

      <div class="block ???" data-category="???">
        <h1><?php echo $film['nom_fr']; ?></h1>

        <img src="image.php/<?php echo $film['photo']; ?>?width=500&height=500&cropratio=1:1&image=/www/Cinema_World-HTML5/jaquette/<?php echo $film['photo']; ?>" alt=""> <a rel="prettyPhoto" href="detail.php?id=<?php echo $film['id_film']; ?>&iframe=true&width=100%&height=80%" class="info">Info...</a>

       </div>

    <?php } ?>`
avec des if ? la ou il ya des ??? c'est la qui doit ce trouver les genres Merci pour vos réponse
nox979, il y a 10 ans

voila on ma conseiller d'utiliser le GROUP_CONCAT( )
je lai tester et le probleme est resolu avec 1 requete,

je tien a vous remercier d'avoir essayer de m'aider et d'avoir prit du temp pour moi

Huggy, il y a 10 ans

Ouii mais revois quand même ton MCD, car là c'est 💩