Задать вопрос
w_b_x
@w_b_x

Создание таблицы на основе трёх таблиц и вывод в PHP, как?

Доброго времени суток!
Буду бесконечно благодарен тому, кто меня выручит.

Есть 3 таблицы:
  1. USERS - таблица с пользователями
  2. PROJECTS - таблица с проектами
  3. PERSONAL - таблица, в которой хранятся сотрудники и зависимости USER-PROJECT
USERS условно состоит из:
  1. ID
  2. NAME (имя пользователя)
  3. PHOTO (аватарка)
PROJECT условно состоит из:
  1. ID
  2. URL (адрес проекта)
  3. OWNER (владелец проекта)
PERSONAL условно состоит из:
  1. ID
  2. PROJECT (id проекта)
  3. USER (id пользователя, который имеет доступ к проекту)
Задача:
Вывести в PHP таблицу всех проектов. В одном из столбцов таблицы должны быть аватарки всех юзеров, у кого есть доступ к тому или иному проекту.

Собственно как получить всё по отдельности понятно, а вот как сформировать данные в нужную таблицу не понятно:
SELECT `id`,`url` FROM `projects` WHERE `owner` = $user LIMIT 10 // получение проектов
SELECT `id`,`project`,`user` FROM `personal` // получение доступов
SELECT `photo` FROM `users` WHERE `id` = $user // получение аватара некого пользователя


Но вот как выполнить задачу не представляю... Понимаю что JOIN'ы нужно использовать, но вот ума не приложу как сделать. Помогите, пожалуйста.
  • Вопрос задан
  • 246 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@Arik
Если задача стоит одним запросом (показать знание SQL), то можно попробовать что такое сделать:
SELECT 
    `a`.`id` AS  `projectId`,
    `a`.`url` AS `projectUrl`,
    GROUP_CONCAT(`c`.`photo` SEPARATOR ', ') AS `photos`
FROM `projects` AS `a`
LEFT JOIN `personal` AS `b` ON `b`.`project` = `a`.`id`(?)
LEFT JOIN `users` AS `c` ON  `c`.`id` = `b`.`user`


Если задача стоит просто таблицу сделать, то лучше отдельными запросами
1. Первым запросом получаем список проектов
2. Собираем id проектов
3. Делаем запрос в таблицу с доступами
4. Делаем запрос с пользователями
5. Собираем вместе данные
Такой подход менее ресурсоемкий для БД, лучше 2-3 запроса по индексам, чем JOIN'ы стряпать.
Могу ошибаться конечно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽