Использование MySQL 5.7, у меня есть movie
таблицу, которая имеет много полей единственное значение:Есть ли способ извлекать данные из множества таблиц один-ко-многим во время одного вызова с MySQL?
+--------------+--------------+
| Field | Type |
+--------------+--------------+
| id | int(11) |
| title | varchar(255) |
| release_year | int(11) |
| rating | int(11) |
+--------------+--------------+
Когда я звоню запрос на этой таблице, как SELECT * FROM movie WHERE id = 5
он будет возвращать только одну строку с данными каждого столбца, как и ожидалось.
У меня есть несколько таблиц с отношением «один ко многим» с этой таблицей movie
. У меня movie_subtitle
, movie_language
, movie_actor
и т.д. Вот один, например:
+--------------+--------------+
| Field | Type |
+--------------+--------------+
| id | int(11) |
| movie_id | int(11) |
| subtitle | varchar(255) |
+--------------+--------------+
Моя проблема заключается в том, что для того, чтобы мне получить все данные поля для одного фильма, кажется, мне нужно сделать около 10 SELECT
звонков. Один для таблицы movie
, а затем по одному для каждой добавочной надстройки.
Если у пользователя есть 1000 фильмов, это быстро может превратиться в 10 000 звонков SELECT
, если я пытаюсь запустить большой запрос по всей коллекции.
Есть ли способ сделать все это в один позвонить? Или это так, как должно быть? Я чувствую, что есть лучший способ сделать это, и я просто недостаточно осведомлен о связях с базой данных, чтобы понять, чего я здесь не вижу.
Мне нужно передать данные, полученные из этих вызовов, на мою страницу PHP, чтобы поместить ее в JSON.
Есть ли причина, по которой вы не просто используете объединения для группировки данных? Без структуры таблицы, образцы данных (возможно, sql скрипка) и зная, что вы хотите в качестве образца, люди здесь просто будут гадать. –
Я бы предложил либо объединить данные вместе, либо выполнить несколько запросов, вытягивая дополнительные данные, которые вы можете объединить позже в php. В случае объединений он отлично работает, но вы, как правило, получаете дублирующиеся данные в своем возвратном результате, и вам придется игнорировать его или в зависимости от вашего вывода, вы также можете объединить данные group_concat в один столбец. С несколькими запросами он практически не выигрывает только для одной записи, но с несколькими записями количество запросов не увеличивается. –
'JOIN' возвращает много строк с теми же данными, за исключением одного столбца ... например: Фильм Goonies вернет три строки, все с одинаковыми данными, ожидайте, что столбец' genre' в каждой строке будет Adventure , Комедия и Семья. Просто ищем способ избежать этого. –