Я пытаюсь сделать что-то, что (должно быть) очень просто. Может быть, я что-то упустил.
Я хочу получить полный список людей, с которыми работал человек. Моя конечная цель – найти, с кем он работает чаще всего (в любых отношениях, которые могут быть)
Пример: Robert De Niro
действовал вместе с Джо Пески 7 раз, но направил его дважды. В результате я хочу получить таблицу из 9 записей.
Я могу использовать тему API, но это только возвращает список фильмов. Затем я должен выполнить 10+ запросов API, чтобы получить бросок каждого фильма. Принимает навсегда, а код – кошмар.
Если я использую поиск в MQL, я могу только искать фильмы, в которых снимался Robert De Niro
, но не каждый фильм, который он направил, или написал, или продюсировал, или сыграл главную роль. В основном я могу искать только по одной роли за раз.
Есть ли способ лучше? Мне нужно составить список:
Movies
Actors/Crew People
Roles
связанные с Movies
и People
Что я сейчас делаю:
Robert De Niro
и получите идентификатор машины Как вы видите, это очень дорогостоящая операция. Это также чрезвычайно сложно избежать дубликатов таким образом (хотя я над этим работаю)
edit: Вот мой текущий запрос MQL (по какой-то причине он работает только в том случае, если я также укажу два имени актера, но это еще одна проблема.
$query = array(array( 'a:starring'=>array('actor'=>'Joe Pesci'), 'b:starring'=>array('actor'=>'Robert De Niro'), 'directed_by'=>null, 'produced_by'=>array(), 'written_by'=>array(), 'executive_produced_by'=>array(), 'name'=>null, 'mid'=>null, 'starring'=>array(array('actor'=>array('mid'=>null, 'name'=>null))), 'type'=>'/film/film' ));
в$query = array(array( 'a:starring'=>array('actor'=>'Joe Pesci'), 'b:starring'=>array('actor'=>'Robert De Niro'), 'directed_by'=>null, 'produced_by'=>array(), 'written_by'=>array(), 'executive_produced_by'=>array(), 'name'=>null, 'mid'=>null, 'starring'=>array(array('actor'=>array('mid'=>null, 'name'=>null))), 'type'=>'/film/film' ));
MQL:
[{ "a:starring": {"actor":"Joe Pesci"}, "b:starring": {"actor":"Robert De Niro"}, "directed_by":null, "produced_by":[], "written_by":[], "executive_produced_by":[], "name":null, "mid":null, "starring": [{"actor": {"mid":null,"name":null}}], "type":"\/film\/film"}]
в[{ "a:starring": {"actor":"Joe Pesci"}, "b:starring": {"actor":"Robert De Niro"}, "directed_by":null, "produced_by":[], "written_by":[], "executive_produced_by":[], "name":null, "mid":null, "starring": [{"actor": {"mid":null,"name":null}}], "type":"\/film\/film"}]
в[{ "a:starring": {"actor":"Joe Pesci"}, "b:starring": {"actor":"Robert De Niro"}, "directed_by":null, "produced_by":[], "written_by":[], "executive_produced_by":[], "name":null, "mid":null, "starring": [{"actor": {"mid":null,"name":null}}], "type":"\/film\/film"}]
Вы можете сделать это все в одном запросе MQL с различными подзапросами для свойств direct / written / acted. Просто убедитесь, что вы делаете каждый подзапрос необязательным.
Например:
[{ "a:starring": { "actor": "Joe Pesci" }, "b:starring": { "actor": "Robert De Niro" }, "directed_by": [{ "id": null, "name": null, "optional": true }], "produced_by": [{ "id": null, "name": null, "optional": true }], "written_by": [{ "id": null, "name": null, "optional": true }], "executive_produced_by": [{ "id": null, "name": null, "optional": true }], "name": null, "mid": null, "starring": [{ "actor": { "mid": null, "name": null } }], "type": "/film/film" }]
Я не знаю MQL, но стандартный SQL был бы таким:
Select p.Name + ' has worked with '+p2.name+' on the movie '+m.Name from Person p join Roles r on r.PersonId=p.Id join Movie m on m.Id=r.MovieId join Roles r2 on r.MovieId=m.Id and r2.Id <> r.Id join Person p2 on p2.Id=r2.PersonId