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 :
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 } ?>
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
$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 ?
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
Comment ça filtrer sur le 2ème genre ? Il n'y a pas de clause WHERE dans ta requête, je comprends pas trop
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
je vous montre une image de ce que je voudrai
http://www.hostingpics.net/viewer.php?id=466935Sanstitre.png
ici j'ai fait un exemple on vois les 2 meme film mais avec 2 genres different
dans mon .div.block il devrai avoir Action Fantastique sur la meme ligne
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 } ?>
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.
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
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