|
|
|
Пожалуйста помогите разобраться с запросом
|
|||
|---|---|---|---|
|
#18+
Пожалуйста помогите понять следующее 1) Есть база учебного расписания состоящая из таких таблиц a) list_of_pairs (список пар) колонки: id date (дата пары) time (время пары) groups_id (айди группы) subjects_id (айди предмета) teachers_id (айди учителя) rooms_id (айди аудитории) form_of_study (айди формы обучения) b) groups (список групп) колонки: id groups_name (название группы) period_study (период обучения) fin_date (дата окончания) с) rooms (список аудиторий) колонки: id number (номер аудитории) specilisation (специализация) d) subjects (список предметов) колонки: id subjects_name (название предмета) e) teachers (список учителей) колонки: id first_name (имя учителя) middle_name (отчечство) last_name (фамилия) spec_subjects (cпециализация) Вопрос 1, Я пытаюсь извлечь расписание для ВСЕХ групп за ОПРЕДЕЛЕННЫЙ ПРОМЕЖУТОК ВРЕМЕНИ (BETWEEN $start_date AND $finish_date) , Для всех я имею в виду даже для тех кому к примеру забыли поставить расписание на этот промежуток.(то есть нет данных в таблице list_of_pairs (список пар) То есть группа должна учится а расписание то ли кончилось то либо забыли поставить $query="SELECT groups_id,groups_name,date,time,first_name,last_name,number,subjects_name,form_of_study,period_study FROM groups as G LEFT JOIN list_of_pairs as L ON G.id=L.groups_id LEFT JOIN teachers as T ON T.id=L.teachers_id LEFT JOIN rooms as R ON R.id=L.rooms_id LEFT JOIN subjects as S ON S.id=L.subjects_id WHERE date BETWEEN $start_date AND $finish_date ORDER BY groups_name,time,date asc "; Запрос извлекает вроде все правильно я несколько раз проверял но почему правильно понять не могу. вопрос в следующем - groups as G LEFT JOIN list_of_pairs выбирает все группы и в независимости есть пары или нет правильно же? То есть то что нужно но вот дальше LEFT JOIN teachers as T ON T.id=L.teachers_id должен выбирать ВСЕХ тичеров (даже у тех у которых пар нет по идее) и эти данные должны попадать в итоговую выборку. дальше тоже самое должно быть с rooms as R ON R.id=L.rooms_id Должны попадать по логике но у меня не попадают (как мне и надо в принципе) Или оно отбирает только тичеров и комнаты которые есть в list_of_pairs а оно ведь левее всех остальных связей? Или я неправильно понимаю. Я специально добавил новых тичеров в таблицу teachers и новые комнаты в таблицу rooms Повторил запрос количество записей не поменялось. Помогите понять пожалуйста Боюсь выплывит где то косяк хоть сейчас вроде и правильно работает. 2) Вопрос как выбрать все такие итоговые данные так чтобы условие BETWEEN $start_date AND $finish_date не отсекало группы у которых нет пар. То есть к чему приравнять date? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2009, 14:37 |
|
||
|
Пожалуйста помогите разобраться с запросом
|
|||
|---|---|---|---|
|
#18+
лефт джоин включает в выборку все записи из таблицы, которая стоит до него, независимо от того, нашлись ли дня них записи из таблицы, стоящей после него. Записи из таблицы, стоящей после лефт джоина включаются только те, которые нашли свою связь с таблицей стоящей до джоина. Остальные записи из таблицы после джоина не включаются в выборку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2009, 16:23 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=81&tid=1542974]: |
0ms |
get settings: |
4ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 319ms |

| 0 / 0 |
