2017-05-24 13 views
-1

この質問をタイトルで説明する方法がわからないので、映画や俳優の例を挙げます。MySQL - 俳優が一緒に働いた他の俳優を見つけよう

私は3つのテーブル(テーブル名 - フィールド)があります。私は、WHERE句でactor.idを使用し、出力が働いている俳優のリストでなければなりませんクエリを作成したい

actor - id, name 
movie - id, title 
actor_movie - actor_id, movie_id 

をこの俳優との映画。好ましくは、彼らが一緒に働いた映画の数によって順序付けられます。

編集:これは私が今は得たものですが、他の俳優は表示されません。俳優と

SELECT a.name, COUNT(m.title) movie_count 
FROM actor_movie 
JOIN actor 
ON actor.id = actor_movie.actor_id 
WHERE actor.id = 157 
GROUP BY actor.name 
ORDER BY movie_count DESC 
+0

select a.id, a.name, counted.movies from actor a join ( select actor_id, count(*) as movies from actor_movie where movie_id in (select movie_id from actor_movie where actor_id = @actor) and actor_id <> @actor -- remove this if you want to see how many movies the @actor has group by actor_id ) counted on counted.actor_id = a.id order by count(*) desc; 

そして、まだ別:これを書くために

select a.id, a.name, count(*) from actor a join actor_movie am on am.actor_id = a.id where movie_id in (select movie_id from actor_movie where actor_id = @actor) and actor_id <> @actor -- remove this if you want to see how many movies the @actor has group by a.id order by count(*) desc; 

もう一つの方法は?まだ何か試しましたか? –

+0

正直言って、私は非常に基本的なSELECT以外のどこから始めるべきかわかりません。あなたのコメントは、簡単な解決策があることを示唆しています。 :) – Kaah

+0

学習を始めよう。 'JOIN'、' COUNT'、 'GROUP BY'が必要です –

答えて

1

セレクト映画は、俳優が他の映画で俳優、グループを選択し、カウント:それは唯一の俳優157がでてきたどのように多くの映画を数えます。問題のようです何

select 
    actor_id, 
    (select name from actor a where a.id = am.actor_id) as name, 
    count(*) as movies 
from actor_movie am 
where movie_id in (select movie_id from actor_movie where actor_id = @actor) 
and actor_id <> @actor -- remove this if you want to see how many movies the @actor has 
group by actor_id 
order by count(*) desc; 
+0

ありがとうございました。私はサブクエリが必要であると仮定しましたが、WHERE節でそれをあまり使用していません。 'actor_id <> @ actor'はとても素敵なタッチでした! 質問のタイトルをよりわかりやすく変更する方法はありますか? – Kaah

+0

ようこそ。タイトルはあなたの質問に完全に合っています。それを変更しないでください。 –