@lexstile

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

Есть страница просмотра конкретного элемента.
Есть страница списка этих элементов.

Задача: получить несколько связанных записей из другой таблицы.
Для конкретного элемента мы можем написать отдельный запрос/метод, который принимает id этого элемента и выцепить необходимые данные.

Но что делать, когда эти же данные нужны на странице списка элементов?
То есть, у каждого элемента есть связанные с ним записи из другой таблицы. Здесь мы не привязываемся к конкретному id. Здесь получаем просто все элементы.

И как вложить внутрь каждого элемента массива записи из другой таблицы?

Array
(
    [0] => Array
        (
            [id] => 17
            [name] => Киевская Русь
           // чтобы выглядело примерно так
            [elements] => [
                        [field1]  => 'field1'
                        [field1]  => 'field1'
            ]
        )

    [1] => Array
        (
            [id] => 19
            [name] => Скандинавия
        )

    [2] => Array
        (
            [id] => 11
            [name] => СССР
        )

    [3] => Array
        (
            [id] => 15
            [name] => СССР 1
        )

    [4] => Array
        (
            [id] => 18
            [name] => Тест
        )

)


UPD:
1. Я могу сделать GROUP_CONCAT и все вернется в строке с каким-то разделителем. Далее explode. Но этот вариант, как мне кажется, не оптимальный.
2. Можно сделать отдельный запрос на получение данных из второй таблицы и потом их смаппить в цикле перед выводом. Тоже, как показалось, вариант не оптимальный.
  • Вопрос задан
  • 34 просмотра
Решения вопроса 1
@aleksmir
Системный администратор, программист
Можно одним запросом все достать:
SELECT `country`.`id`, `country`.`name`, `table2`.`field1`, `table2`.`field2`
FROM `country` LEFT JOIN `table2` ON `country`.`id`=`table`.`country_id`
ORDER BY `country`.`id`, `table2`.`field`;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы