-1

我有两张桌子

用户

  Id                user         grade    access_level
  1                Alice           1            1
  2               Charles          3            3
  3                 Ben            2            2

班级

  Id                name         grade
  1               biology          1
  2                math            2
  3              geography         2

我可以阅读$username = $_SESSION['MM_Username']并且我想为每个登录的用户选择一个类列表,具体取决于他们的 access_level。对于 access_level => 3 用户可以查看所有课程,对于 access_level < 3 用户只能查看与他/她的年级相同的课程。所以:对于 Charles,access_level=3,我想要这个结果

  Id                name         grade
  1               biology          1
  2                math            2
  3              geography         2

对于 Alice,access_level=1 和grade = 1,我想要这个结果

  Id                name         grade
  1               biology          1

对于 Ben,access_level=2 和grade = 2,我想要这个结果

  Id                name         grade
  1                math            2
  2              geography         2

从评论中添加

他们拥有基于他们在学校的职位的 access_levels。假设查尔斯是教授,爱丽丝和本是学生。学生只能看到他们的班级,但老师可以看到一切。

4

3 回答 3

1

我不太确定你要达到什么目标,根据我的理解,你可以在下面做这样的事情。

SELECT u.user,c.name 
FROM user AS u INNER JOIN class AS c ON u.grade = c.grade
WHERE u.access_level = 1 AND u.grade = 1

SELECT u.user,c.name 
FROM user AS u INNER JOIN class AS c ON u.grade = c.grade
WHERE u.access_level = 2 AND u.grade = 2

SELECT u.user,c.name 
FROM users AS u INNER JOIN class AS c ON u.grade = c.grade
WHERE u.grade != 3
于 2013-10-30T09:15:54.737 回答
1

您可以将 INNER JOIN 与 OR 一起使用:

SELECT Class.*
FROM
  Class INNER JOIN Users
  ON Class.grade = Users.grade
     OR Users.access_level>=3
WHERE
  User='username';

在此处查看小提琴。

于 2013-10-30T09:17:42.020 回答
1

尝试这个。

SELECT *
FROM Users as U, Class as C
WHERE U.user = $username
AND U.access_level>=C.grade
于 2013-10-30T09:23:37.657 回答