[SQL] Problème jointure

Fermé
mick1066 - 21 mai 2010 à 11:28
micka1066 Messages postés 2 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 23 mai 2010 - 23 mai 2010 à 19:28
Bonjour,

Voila j'ai un petit souci, concernant un devoir. :(
J'ai tout un tas de requête SQL à faire sur la base Sakila (voir le schéma ci-dessous).
J'ai réussi les premières requêtes mais les suivantes se corsent et font appelles à des relations entre des tables qui n'ont pas de lien entre elles.

La requête en question est la suivante:
[I]"Donner le titre des films (titre) et le nombre d'acteurs (nombre_acteurs) des films de musique, en les triant pas nombre d'acteur décroissant."/I

Mon problème viens du fait qu'il faut mettre en relation les tables film, actor et category...
J'ai trouver peut-être un début de réponse à mes problèmes en faisant quelque chose du genre:

[I]SELECT film.title
FROM actor
JOIN film_actor ON (actor.actor_id = film_actor.actor_id)
JOIN film ON (film_actor.film_id = film.film_id)
JOIN film_category ON (film.film_id = film_category.film_id)
JOIN category ON (film_category.category_id = category.category_id)
WHERE category.name ='Music';/I

Cependant je ne sait pas où mettre le COUNT pour compter et afficher le nombre d'acteur pour chaque films.

Voila j'ai tout un tas de requête qui suivent celle-ci et impossible de les faire tant que je n'est pas résolu ce problème qui me bloc.
Si quelqu'un pouvait m'indiquer déjà si ma méthode d'enchainer les JOIN pour remonter dans les tables est correcte (et si possibilité d'une petite d'aide au count car ça fait un moment que je serre la et les délais se rapproche à grand pas ^^).

Merci d'avance à ceux qui prendront un peu de temps pour m'aider. :)

Bonne journée

Schéma: [URL=https://imageshack.com/][IMG]http://img517.imageshack.us/img517/5202/sakilaschema.jpg/IMG/URL



A voir également:

5 réponses

Tes tables sont toutes liées entre elles, même si ce ne sont pas des liens directs, donc tu peux logiquement faire ta requête de cette manière :

( Je ne fais jamais de JOIN pour mes jointures, peut être à tord ^^ )

SELECT 	film.titre, COUNT(film_actor.actor_id) as nb_acteur
FROM 	film, film_actor, film_category, category
WHERE 	film.film_id = film_category.film_id
AND 	film_category.category_id = category.category_id
AND 	film.film_id = film_actor.film_id
AND category.name = "Music"
ORDER BY nb_acteur DESC;



Pour le count, il faut le mettre dans le select, et tu peux également lui attribuer un nom avec le "AS" pour que ce soit plus clair. Bon tout ceci est à vérifier mais je pense que c'est proche de la solution ;)
1
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
21 mai 2010 à 15:44
Bonjour,

ta requête me semble correcte, néanmoins j'aurais rajouté un
GROUP BY film.titre
, avant le ORDER BY.
0
Bonjour,

Merci bien pour vos réponses !

Je vais aller voir tout ça et je vous redis.

Pour Titus: Je sais mais la donnée nous oblige à faire les jointures à l'aide de JOIN et non pas dans le where).

Bonne journée.
0
micka1066 Messages postés 2 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 23 mai 2010
23 mai 2010 à 19:02
Re,

Merci bien pour votre aide, j'ai réussi à faire la requête, il reste cependant un point. Je dois trier l'affichage par Nombre D'acteur décroissant:

Voici la requête:

SELECT film.title, COUNT(film_actor.actor_id) AS NbrActeur
FROM actor
INNER JOIN film_actor ON (actor.actor_id = film_actor.actor_id)
INNER JOIN film ON (film_actor.film_id = film.film_id)
INNER JOIN film_category ON (film.film_id = film_category.film_id)
INNER JOIN category ON (film_category.category_id = category.category_id)
WHERE category.name ='Music'
GROUP BY film.title;

Voila et à la fin j'aimerai bien trier par NbrActeur decroissant, le seul truc c'est que NbrActeur n'est pas reconnu.
Quelqu'un aurait-il une idée?

Également si je souhaitait afficher que les films qui contienne plus de 7 acteur. Je ne peux pas utiliser NbrActeur comme une variable et faire
WHERE category.name = 'Music' AND NbrActeur > 7

Voila je suis perdu en gros :(
0
Sasa93 Messages postés 252 Date d'inscription mardi 3 juin 2008 Statut Membre Dernière intervention 27 février 2012 20
23 mai 2010 à 19:04
J'ai une petite question à te demander tu travail sur quel SGBD ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
micka1066 Messages postés 2 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 23 mai 2010
Modifié par micka1066 le 23/05/2010 à 19:41
Salut,

j'utilise mySQL avec PHPMyAdmin.

J'ai trouvé comment afficher que les film ayant plus de 7 acteurs, me reste plus qu'a les trier par ordre décroissant du nombre d'acteur.

Voila ma requête acteullement:

SELECT film.title, COUNT(*) AS NbrActeur
FROM actor
INNER JOIN film_actor ON (actor.actor_id = film_actor.actor_id)
INNER JOIN film ON (film_actor.film_id = film.film_id)
INNER JOIN film_category ON (film.film_id = film_category.film_id)
INNER JOIN category ON (film_category.category_id = category.category_id)
WHERE category.name ='Music'
GROUP BY film.title HAVING COUNT(*) > 7 ;


EDIT: Voila c'est tout bon! Pour ceux que sa intéresse:

SELECT film.title, COUNT(*) AS NbrActeur
FROM actor
INNER JOIN film_actor ON (actor.actor_id = film_actor.actor_id)
INNER JOIN film ON (film_actor.film_id = film.film_id)
INNER JOIN film_category ON (film.film_id = film_category.film_id)
INNER JOIN category ON (film_category.category_id = category.category_id)
WHERE category.name ='Music'
GROUP BY film.title HAVING COUNT(*) > 7 ;
ORDER BY COUNT(*) DESC;
0