所以在我的项目中,我需要访问一个名为“日期”的表。表“日期”包含以下内容:
ClassID | TeacherID | StudentID | DateInfo | Status | DateID
对于除 DateID 之外的任何 ID,我需要创建一个连接到日期模型的模型。 另一个重要的信息是我有一个名为“用户”的表和 2 个派生自“用户”、“学生”和“教师”的表。
My Problem: because I need both the student and the teacher in the same record, I need to request from the DB the user's information about both of them in the same query. I can not do that because of i don't know how can I define the student's information different from the teacher information.
用户表:
UserID | Name | LastName | Password | Status | Role
教师表:
TeacherID | ClassID
学生表:
StudentID | YearAndClass
我正在尝试创建的查询:
SELECT
IF(Users.Role == 0(Student Role))
Users.Name as sName, ....
ELSE IF(Users.Role == 1(Teacher Role))
Users.Name as tName, ....
FROM Dates, Users, Students, Teachers
我知道这行不通,但我不确定我还能如何描述它。
提前致谢!
最佳答案
根据我对你的问题的评论,我仍然认为你应该回去稍微修改你的结构,你似乎大部分都在那里,但最好在使用它之前让任何过程的基础正确。
就是说,据我了解,您希望获得 1 个列表中的用户名,但可以按其角色区分。以下应该有效。
我添加了 UserIDs 和 Role 字段,以便您可以根据您的数据检查它们,看看它是否按预期工作。
SELECT
CASE WHEN d.Role = 'Teacher Role' THEN ut.UserID
WHEN d.Role = 'Student Role' THEN us.UserID
ELSE ''
END AS UserID
,CASE WHEN d.Role = 'Teacher Role' THEN ut.Name
WHEN d.Role = 'Student Role' THEN us.Name
ELSE ''
END AS UserName
,d.Role
FROM Dates d
LEFT JOIN Users ut ON d.TeacherID = ut.UserID
INNER JOIN Teachers t ON ut.UserID = t.TeacherID
LEFT JOIN Users us ON d.StudentID = us.UserID
INNER JOIN Students s ON us.UserID = s.StudentID
或者可能是下面的(未经测试);
SELECT
CASE WHEN d.Role = 'Teacher Role' THEN ut.UserID
WHEN d.Role = 'Student Role' THEN us.UserID
ELSE ''
END AS UserID
,CASE WHEN d.Role = 'Teacher Role' THEN ut.Name
WHEN d.Role = 'Student Role' THEN us.Name
ELSE ''
END AS UserName
,d.Role
FROM Dates d
LEFT JOIN Users ut ON d.TeacherID = ut.UserID AND ut.UserID IN (SELECT DISTINCT TeacherID FROM Teachers)
LEFT JOIN Users us ON d.StudentID = us.UserID AND us.UserID IN (SELECT DISTINCT StudentID FROM Students)
关于sql - 为了创建我的模型,我需要执行一个非常困难的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54458253/