Объединение строк в виде массива из другой таблицы для каждой строки

Я кодирую сценарий архивного архива с использованием codeigniter для себя с PHP. Я получаю информацию о фильме из IMDb и добавляю их в свою базу данных. Я добавляю ссылки для фильмов, которые я выбрал, используя другую таблицу, называемую ссылками.

Это запрос, который я использую для получения фильмов из базы данных:

$movies = $this->db->query("SELECT * FROM movies ORDER BY ".$order['by']." ".$order['type']." LIMIT ".$limit.", " . $this->config->item('moviePerPage') ); 

и я собираю его в файле вида следующим образом:

 foreach ($movies->result() as $row) { echo $row->name; } 

Теперь ссылки должны отображаться для каждого фильма с совпадающими идентификаторами (фильмы могут содержать более одной ссылки). В моей таблице ссылок есть следующие столбцы: 'id', 'movieid', 'name', 'link'

Как я могу получить ссылки для каждого фильма с одним запросом MySQL? Можно ли получить все ссылки, связанные с текущим фильмом $ row, и связать их с одной переменной как массивом? с этим я могу закодировать его с помощью foreach () и показать ссылки для каждого фильма.

btw: movies.movieid и links.movieid имеют одинаковые данные.

Solutions Collecting From Web of "Объединение строк в виде массива из другой таблицы для каждой строки"

Я думаю, вам нужен GROUP_CONCAT от mysql

Сделайте что-то вроде этого:

 SELECT movies.*, group_concat(links.link ', ') as links FROM movies LEFT JOIN links ON links.movieid = movies.movieid GROUP BY movies.movieid 

Вы получите список ссылок, разделенных запятыми, для каждого фильма. Что вы можете извлечь так:

 foreach ($movies->result() as $row) { $linksArray = explode(",",$row->links); } 

Обновления Я думаю, что это единственный способ получить результаты без наличия нескольких строк результатов для одного фильма с несколькими ссылками.

Просто будьте осторожны с максимальной длиной символов, которые вы можете получить в результате – по умолчанию 1024 символа. Прочитайте эту Mysql group_concat_max_length и длину группы concat max, чтобы знать, как переопределить предел.

И, как сказал Дэн Гроссман, если вы чувствуете, что ссылки могут содержать запятую, используйте другой или необычный разделитель.

ПРИСОЕДИНИТЕСЬ к двум таблицам, как следует из вашего имени вопроса.

 SELECT movies.*, links.* FROM movies LEFT OUTER JOIN links ON links.movieid = movies.movieid ... 

Вы получите одну строку за пару ссылок на фильм. Если нет ссылок для фильма, вы получите строку с информацией о фильме и NULL в столбцах, соответствующих таблице ссылок.

Вы можете перебрать эти результаты и поместить ссылки для каждого фильма в массив, подкрепленный фильмом, если хотите.