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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 09:29
2500 руб./за проект
25 апр. 2024, в 09:27
4000 руб./за проект
25 апр. 2024, в 09:20
10000 руб./за проект