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'ы нужно использовать, но вот ума не приложу как сделать. Помогите, пожалуйста.
  • Вопрос задан
  • 230 просмотров
Решения вопроса 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'ы стряпать.
Могу ошибаться конечно
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы