Устройство таблицы schedule_items

Давайте теперь перейдем к самому интересному. К данным расписания. Хранится оно в табличке schedule_items. Мы ее в прошлый раз смотреть не стали потому что она сильно сложная. Поэтому рассмотрим сейчас. В ней есть следующие поля:

  • id – уникальный идентификатор
  • groups – список групп в текстовом виде, для которых проводится занятие
  • group_id – идентификатор группы для которой проводится занятие
  • ngroup – номер подгруппы для которой проводится занятие
  • teacher_id – идентификатор преподавателя для которого проводится занятие
  • auditory_id – аудитория в которой проводится занятие
  • discipline – название аудитории
  • type – тип занятие (значение 1 значит, что это лекция, 2 – практика, 3 – лаба)
  • para – номер пары
  • day – номер дня
  • everyweek – является ли пара еженедельной (2 – является, 1 – не является)
  • dbeg – дата начала недели на которое расписание актуально

Как видим данные весьма навороченные, визуально выглядит так:

Давайте попробуем делать разные запросы, чтобы разобраться как с этим всем работать.

Расписание преподавателя

Строим запрос

Как и в случае со списком групп, где чтобы получить группы из конкретного института мы ориентировались на поле faculty_id, тут примерно тоже самое. То есть если мы хотим получить список записей, привязанных к конкретному преподавателю, надо ориентироваться на поле teacher_id.

Осталось только узнать этот самый teacher_id. Это поле содержит идентификатор преподавателя. Сам список преподавателя находится в таблице teachers.

Найдите в этой таблице вашего любимого/нелюбимого преподавателя и узнайте его id. Воспользуйтесь поиском по имени:

SELECT *
FROM teachers
WHERE full_name like '%Каташ%'

выдаст что-то такое, нас интересует вот эта циферка

Теперь используя этот номер запросим расписание по преподавателю:

SELECT *
FROM schedule_items
WHERE teacher_id = 4520	

получим много записей

если присмотреться, то можно заметить некий элемент повторения, то есть записи время от времени с небольшими изменениями повторяются

отличие по сути только в полях id и dbeg

И вот это самое dbeg как раз одно из самых важных полей. Оно указывает дату начала недели, на которую действует расписание.

Наверное, вы замечали, что на сайте расписание всегда показывается на текущую неделю. Есть возможность просматривать на следующую неделю. Так вот и в базе оно тоже хранится своего рода слоями. То есть копия расписания на конкретную неделю.

Отделить какие записи к какой неделе относятся помогает поле dbeg.

В поле dbeg указывается дата начала недели, на которую действительны записи. То есть записи которые относятся к одной и той же недели имеют одно и тоже значение в dbeg.

Чтобы оставить только записи, относящиеся к конкретной неделе, надо отфильтровать по этому полю. Сформируем дату начала текущей недели в виде строки ГОД-МЕСЯЦ-ЧИСЛО типа 2022-11-14 и отфильтруем:

SELECT *
FROM schedule_items
WHERE teacher_id = 4520	and dbeg = '2022-11-14'

отлично, теперь у нас данные на конкретную неделю =)

Сопоставляем с расписанием на сайте

Давайте сравним это с расписанием на сайте. Найдем преподавателя по фамилии:

кстати при таком поиске, внутри на сайте как раз срабатывает, тот самый запрос поиска преподавателя по имени, что мы писали выше:

SELECT *
FROM teachers
WHERE full_name like '%Каташ%'

открываем по ссылке. Кстати обратите внимание на ссылку:

то есть в принципе вы можете открыть вашего преподавателя по идентификатору, сформировав ссылку вида и просто поменяв в ней номер:

https://www.istu.edu/schedule/?prep=4520

единственное, он выдаст вам расписание на текущую неделю. А если хочется посмотреть старое расписание, можно либо воспользоваться календарем справа:

либо сформировать ссылку в виде:

https://www.istu.edu/schedule/?prep=4520&date=2022-11-14

Можно попробовать посопоставлять расписание на сайте с расписание в табличке, допустим тут я за первые несколько дней сопоставил:

Пока возможно не совсем ясно каким образом мы сопоставили данные на сайте с данными в табличке. Но в принципе если посмотреть на название групп, то логика должна прослеживаться. Мы в следующих задания разберем это подробнее.

Попробуйте теперь сделать задание

Задание

Разбираемся с расписанием преподавателя.


По аналогии с подсказкой, запросите расписание по вашей любимой аудитории и сделайте микро отчет вида пример_отчета.docx