2013-05-23 2 views
2

У меня проблема с запросом mysql. То, что я должен сделать, это найти пару актеров, которые выступали в большинстве фильмов вместе.Подключение нескольких таблиц и использование самостоятельного присоединения

У меня есть 3 таблицы:

actor - has id and name

casting - has movieid, actorid and ord

movie - has id (own id, not the one from actor), title, year, score, votes and director.

Итак, я следующий запрос:

SELECT * 
FROM (SELECT a.actorid, 
b.actorid, 
c.name, 
d.name, 
COUNT(*) AS zajednicka_pojavljivanja 
FROM casting a, 
casting b, 
actor c, 
actor d, 
WHERE a.movieid=b.movieid AND a.actorid<>b.actorid 
GROUP BY a.actorid,b.actorid,c.name,d.name) tablica_temp 
ORDER BY zajednicka_pojavljivanja DESC; 

Что я получаю ошибку:

ОШИБКА

1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE a.movieid=b.movieid AND a.actorid<>b.actorid GROUP BY a.actorid) tablica_t' at line 1

Я не знаю, где эта проблема, может кто-нибудь помочь?

+1

Ну, запятая после 'actor D' ошибается, но я не заглянул, если это даст результаты, которые вам нужны. – xQbert

+1

В литейном столе у ​​вас есть actor_id для 2 ведущих ролей на фильм или может быть много актеров на фильм в таблице литья? –

ответ

2

Вы довольно близко. <> по вашему первоначальному запросу просто нужно было установить < или> но не <>, а затем вам нужно было ограничить свои результаты или использовать метод выбора max (count) для получения всех одинаковых значений.

SELECT A.ActorID, B.ActorID, Count(*) MostFilms 
FROM Casting A 
INNER JOIN Casting B 
ON A.MovieID = B.MovieID and A.ActorID < B.ActorID 
Group by A.ActorID, B.ActorID 
order by MostFilms Desc 
Limit 1 

В принципе, это говорит о том, что он присоединяется к тому, чтобы получить парные актеры по фильму. < на A.ActorID на B.ActorID удаляет актера самому себе и противоположностям, поэтому, если существуют Актеры A и B, B в A не будут включены. Заказ по MostFilms по убыванию будет возвращать только ту пару с наибольшим. Падение на это, если две пары имеют одинаковый счет, только один из них будет возвращен.

Если вам нужны имена актеров, вы можете добавить два соединения по одному для каждой таблицы литья.

+0

это сработало отлично! Спасибо – Juraj

+0

@Juraj Спасибо за то, что вы приложили усилия самостоятельно. вы были очень близко, просто нужно толчок в 2 местах! – xQbert

2

У вас есть дополнительная запятая в предложении FROM. Изменение:

actor d, 

в

actor d 
Смежные вопросы