как запросить многие ко многим? - PullRequest
28 голосов
/ 07 мая 2009

Я нашел следующие структуры таблиц, пока смотрел учебник по ruby ​​на рельсах.

table actors
id  int  11  primary key auto_increment
name  varchar  30

table movies
id  int  11  primary key auto_increment
name  varchar  30

table actors_movies
actor_id  int  11
movie_id  int  11

Как мне сделать запрос, чтобы выбрать фильмы, в которых участвует актер?

Я не прошу ruby ​​на коде рельсов. Я хочу получить строку запроса MySQL.

Спасибо!

Ответы [ 4 ]

37 голосов
/ 07 мая 2009

Может быть, что-то вроде этого:

select m.name
from movies m
inner join actors_movies am on m.id = am.movie_id
inner join actors a on am.actor_id = a.id
where a.name = 'Christopher Walken'
17 голосов
/ 07 мая 2009

Следует учитывать, что вы собираетесь загрузить объект автора (из-за моделей RoR), поэтому с идентификатором будет достаточно:

select movies.id, movies.name
from movies inner join actors_movies
on actors_movies.movie_id=movies.id
where actors_movies.actor_id=$actor_id
7 голосов
/ 07 мая 2009

Просто, просто используйте объединенную таблицу, чтобы объединить таблицы фильмов / актеров:

Select m.name 
From actors a
Inner Join actors_movies am On am.actor_id = a.id
Inner Join movies m On m.id = am.movie_id
Where a.name = @your_actor
2 голосов
/ 07 мая 2009
select m.* from movies m 
inner join actors_movies am on am.movie_id  = m.id 
inner join actors a on a.id = am.actor_id 
where a.someField = somevalue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...