Désolé pour ce titre un peu abracadabrantesque....
Voilà mon problème:
J'ai une table (films) contenant des champs, dont un Id.
Dans une autre table (notes), j'ai 3 champs: film, user, note
Le principe c'est que des users mettent des notes à des films mais peu importe.
Je voudrais pouvoir selectionner tout les films dont la moyenne des notes est comprise entre x et y.
Pour l'instant je n'ai trouvé qu'un moyen c'est de passer en deux phases:
1- je récupère tous les ID des films dans un tableau $id
2- je fais une boucle (en php):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $req = mysql_query("SELECT Id FROM films"); while($data = mysql_fetch_assoc($req)) { $id[] = $data['Id'] ; }
Ici j'affiche donc les films dont la note est comprise entre 6 et 7.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 foreach($id as $key => $film) { $moyenne = mysql_query("SELECT AVG(note) FROM notes WHERE film='$film'"); $moyenne = round(mysql_result($moyenne,0),2); if ($moyenne >=6 AND $moyenne <=7) echo "Film ID: $idfilm - Moyenne: $moyenne<br>"; }
J'aimerais savoir si il existe un moyen de faire ça en une seule phase, avec un code qui ressemblerait à
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * from films WHERE "la moyenne des notes dans la table notes pour un id unique est comprise entre x et y"
Solution possible, je rajoute un champ "moyenne des notes" dans la table films, et là la recherche devient galette, mais ça m'oblige à l'updater souvent ce qui n'est pas forcément mieux.
Any idea?
Merci.
Partager