Запрос SQL с использованием информации из 4 таблиц (не все напрямую связаны) - PullRequest
0 голосов
/ 08 апреля 2010

Я разрабатываю простую систему классных комнат, в которой учителя управляют классами и их предметами.

У меня есть 2 уровня доступа в моей таблице учителей, назначенных целым числом (1 = администратор, 2 = пользователь) ... Это означает, что директор является администратором:)

У учителя (уровня 1) может быть много классов, а в классе может быть много учителей (поэтому у меня есть таблица «TeachersClasses»). В классе может быть много предметов, а у учителя может быть много предметов.

По сути, я пытаюсь выполнить запрос, чтобы отобразить предметы преподавателя-администратора (уровень 1). Однако только учителя, имеющие уровень 2, имеют непосредственное отношение к предмету, который задает пользователь-администратор. Директор школы может просматривать все свои предметы через классную комнату, но я не могу отобразить все предметы на одной странице, вместо этого я могу только заставить предметы появляться в определенной аудитории прямо сейчас ...

Это то, что я имею до сих пор, которое ничего не возвращает. (Я предполагаю, что для этого может потребоваться более сложное предложение SQL, чем «INNER JOIN», который является единственным типом соединения, с которым я знаком, и подумал, что этого будет достаточно!

  $query = "SELECT subjects.subjectid, subjects.subjectname, 
subjects.subjectdetails, classroom.classid, classroom.classname 
FROM subjects INNER JOIN classroom ON subjects.subjectid = classroom.classid 
INNER JOIN teacherclasses ON classroom.classid = teacherclasses.classid 
INNER JOIN teachers ON teacherclasses.teacherid = teachers.teacherid 
WHERE teachers.teacherid = '".intval( $_SESSION['SESS_TEACHERID'] )."'"; 

Для того, чтобы все предметы, относящиеся к классу директоров школ, были отображены, я понял, что все мои таблицы нужно будет вызывать здесь? Спасибо за любую помощь!

Пример вывода:

название темы: математика // учитель: мистер Смит // класс: DG99

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

Ответы [ 2 ]

0 голосов
/ 08 апреля 2010

Исходя из названий таблиц (наличие DDL для демонстрации структуры таблиц сделает это более понятным), я предполагаю, что соединение между предметами и классной комнатой недопустимо. Вы действительно хотели присоединить предмет к идентификатору класса?

Кроме того, я не уверен, как связаны вещи уровня 1 и уровня 2 (опять же, DDL может помочь читателям понять), но предварительное внутреннее объединение, о котором вы говорите, может быть внешним объединением. Если у вас есть учитель, которого вы хотите включить, даже если у него нет записи об учительском классе, вы можете выполнить внешнее объединение:

... teacherclasses ON classroom.classid = teacherclasses.classid правое внешнее объединение учителей ON teacherclasses.teacherid = teacher.teacherid ...

Это будет включать все записи учителей, даже если их учитель не отображается в таблице учителей. (Если честно, я мог бы иметь это задом наперед - вы могли бы вместо этого сделать «левое внешнее» - я никогда не могу вспомнить, что именно, поэтому я пробую один способ, и если мне не нравятся результаты, я пробую другой направление, чтобы увидеть, если это улучшает вещи).

Надеюсь, это немного поможет!

0 голосов
/ 08 апреля 2010

Эта строка выглядит как ошибка:

INNER JOIN classroom ON subjects.subjectid = classroom.classid

Вы не получите никаких записей при присоединении темы с classid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...