У меня 4 таблицы.
Пользователь Таблица:
id col1 col2
CoursesAssigned таблица:
id user_id course_id approved
CourseInfo таблица:
id parent_id
курс родителей стол:
id start_date end_date
Я думаю, что имена таблиц и имена столбцов не требуют пояснений.
У меня есть 2 типа пользователей: i) назначенные ii) неназначенные. Я показываю их на 2 разных страницах.
При отображении назначенных учеников мне нужны ученики из пользователей таблицы, для каждого из которых есть не менее одна строка в CoursesAssigned таблица, где user_id
это его собственный идентификатор пользователя, и поле approved
равно 1, а course_id
в этой строке имеет свой собственный parent_id
(из CourseInfo ) с end_date
(из CourseParents ) больше или равно сегодняшнему дню.
Для отображения неназначенных учеников мне нужны ученики из пользователей таблицы, для каждого из которых -
* * Либо тысяча сорок-девять
есть строка NO в таблице CoursesAssigned , где user_id
является его собственным идентификатором пользователя, а столбец approved
имеет значение 1. То есть для неназначенного пользователя, может существовать строка с его собственным идентификатором пользователя, но поле approved
содержит 0.
или
могут быть строки в таблице CoursesAssigned , где user_id
является его собственным идентификатором пользователя, а поле approved
имеет значение 1, но parent_id
получено из CourseInfo имеет от CourseParents и end_date
, что меньше сегодняшней даты.
Я могу написать запрос для назначенных студентов, например:
$date=date('Y-m-d');
$records = User::join('CoursesAssigned','users.id','=','CoursesAssigned.user_id')
->join('CourseInfo','CourseInfo.id','=','CoursesAssigned.course_id')
->join('CourseParents','CourseParents.id','=',
'CourseInfo.parent_id')
->where('CoursesAssigned.approved','=',1)
->where('CourseParents.end_date','>=',$date)
->select('users.id','users.col1','users.col2')
->orderBy('users.id','desc');
Но это не должно приводить к правильному результату, поскольку при этом не проверяется таблица CoursesAssigned для строки не менее 1, которая соответствует всем указанным критериям. Q1) Или это должно быть?
Q2) Как насчет запроса, который выбирает только неназначенных студентов?
РЕДАКТИРОВАТЬ: Ответ может быть в ORM, построитель запросов или даже необработанный MySql для формата Laravel.
EDIT2: Позвольте мне прояснить сценарий здесь:
Мне нужно получать как назначенных, так и неназначенных пользователей по отдельности.
Чтобы получить назначенных пользователей, у меня есть 1 правило: как получить тех пользователей, у которых есть хотя бы 1 утвержденный курс в таблице CoursesAssigned и родитель (получен из таблицы CourseInfo ) из этот курс имеет дату окончания (в таблице CourseParents ) больше или равна сегодняшнему дню.
Для получения неназначенных студентов у меня есть 2 правила:
Правило 1: Получите тех учеников, у которых нет утвержденного курса (т. Е. Все курсы одобрены = 0). Они не назначенные студенты
Правило 2: Получите тех студентов, которые одобрили курсы, но ни один из утвержденных курсов не соответствует критериям для назначенных студентов. Это означает, что не существует утвержденного курса, в котором есть родитель, чья конечная дата больше или равна сегодняшнему дню. Они также не назначенные студенты.