@MdaUZH

Как правильно связать 4 таблицы SQL?

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

Есть 4 таблицы:

1. users:
id | name | surname // пользователи
2. lessons
id | group_id| date //рассписание уроков
3. vizit
id | lesson_id| user_id |was// посещения
4. in_groups
id | user_id| group_id // кто в группе

Нужно вывести такую таблицу посещений:
bc3c909db2294a349a6a9158e13b7be0.png

Как это правильно сделать?
Даже представления не имею как это связать, чтобы не спутались пользователи..
  • Вопрос задан
  • 749 просмотров
Пригласить эксперта
Ответы на вопрос 3
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Не понимаю зачем таблица vizit, если я правильно понял то она должна быть такой:
id | user_id | lesson_id
Но наверное все должно выглядеть так:
1. users: id | name | surname | group_id
2. lesson id | title // инфо урока
3. lesson_date id | date // даты уроков
4. vizit id | lesson_id | user_id // посещения
5. group id | title // инфо группы
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Именно в таком виде непосредственно из базы не выбрать, надо будет преобразовывать на клиенте.
SELECT `u`.`id`, `u`.`name`, `u`.`surname`, `l`.`id`, `l`.`date`, 
       `v`.`was`
  FROM `users` AS `u`
  JOIN `in_groups` AS `g` ON `g`.`user_id` = `u`.`id`
  LEFT JOIN `lessons` AS `l` ON `l`.`group_id` = `g`.`group_id`
  LEFT JOIN `visit` AS `v` ON `v`.`lesson_id` = `l`.`id` 
    AND `v`.`user_id` = `u`.`id`
  ORDER BY `u`.`surname`, `u`.`name`, `u`.`id`, `l`.`date`, `l`.`id`

P.S. В таблицах `visit` и `in_groups` поле `id` лишнее, там первичные ключи должны образовываться парами (`lesson_id`, `user_id`) и (`user_id`, `group_id`) соответственно.
Ответ написан
Комментировать
norguhtar
@norguhtar
Биллинги в телекоме мой конек
Никак. Так-как требуется транспонирование таблицы, а MySQL это не умеет. Наоборот где к примеру вместо столбцов будут строки можно. Так-как ученику нас один. Далее транспонирование делаем в приложении.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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