0

I have 4 tables (among a lot of others - just showing the relevant ones). They are:

  • "users"
    • id
    • name
    • role_id
  • "roles"
    • id
    • name
  • "chapter_role_view_permissions"
    • id
    • chapter_id
    • role_id
  • "chapters"
    • id
    • name

I'm trying to build a query that will return to me a list of all users, their role name, all chapters per user, and whether or not they have view access to each chapter. So lets say there are 2 users and 2 chapter. User 1 is role_id=1 and User 2 is role_id=2. And the chapter_role_view_permissions has 1 record ( id:1 | chapter_id: 1 | role_id: 1 ) which means only users with role_id=1 can view chapter 1.

The query result I am looking for should be something like:

|---users.id---|--roles.id---|---chapters.id--|-can_view_chapter-|

|------ 1 ------|----- 1 -------|------- 1 --------|----------- 1 -----------|

|------ 1 ------|----- 1 -------|------- 2 --------|----------- 0 -----------|

|------ 2 ------|----- 2 -------|------- 1 --------|----------- 0 -----------|

|------ 2 ------|----- 2 -------|------- 2 --------|----------- 0 -----------|

Any idea what the query might look like? I don't want to have to make a new field in chapter_role_view_permissions that says "allowed" and insert new records for each role type with either allowed=1 or allowed=0

4

3 回答 3

2
SELECT users.name, roles.name, chapters.name
FROM users
  LEFT OUTER JOIN roles ON users.role_id = roles.id
  LEFT OUTER JOIN chapter_role_view_permissions link ON link.role_id = roles.id
  LEFT OUTER JOIN chapters ON chapters.id = link.chapter_id
于 2012-11-01T18:44:02.780 回答
0

如你所说:

我正在尝试构建一个查询,它将向我返回所有用户的列表、他们的角色名称每个用户的所有章节,以及他们是否有权查看每一章

只需按照相同的顺序在查询中翻译您自己的话:

SELECT users.id, roles.name, chapters.name FROM users
INNER JOIN roles ON  users.role_id=roles.id
INNER JOIN chapters ON users.id=chapters.id
WHERE users.id=USER_ID

无论如何,您必须更好地解释:您如何关联章节和用户?我假设 chapters.id 与 user.id 相同

于 2012-11-01T18:42:31.550 回答
0
SELECT    u.id, r.id, c.id, IFNULL(c.id, 0) AS can_view_chapter
FROM      users AS u
JOIN      roles AS r ON r.id = u.role_id
LEFT JOIN chapter_role_view_permissions AS p ON p.role_id = r.id
JOIN      chapters As c ON c.id = p.chapter_id
于 2012-11-01T18:50:57.070 回答