跨多个表的MySQL查询问题

时间:2013-10-24 19:28:40

标签: php mysql sql relational-database

对于那些对MySQL或SQL专家来说可能是一个微不足道的问题感到抱歉。我有3张桌子:

  • 用户
  • 网页
  • 安全

安全性有几个级别,如:来宾,标准用户,管理员等。这是一个整数值。所以基本上客人是0,标准是1,管理员是10。

每个用户都有一个用于在安全表中查找的安全ID。

每个页面都有一个安全ID,用于查找给定用户可以看到的页面。

我想创建一个使用当前用户名的查询,返回该用户可以看到的页面。所以基本上返回安全级别小于或等于用户安全级别的所有页面。但是我没有将每个表中的级别只存储到安全表唯一条目的ID中。

我附上了我的数据库架构的屏幕截图:

DB Schema

示例数据:

用户表: users table data

页面表:

pages table data

安全表:

security table data

2 个答案:

答案 0 :(得分:0)

SELECT p.name FROM users u JOIN security s ON u.security_id=s.id 
      JOIN pages p ON s.id=p.security_id where u.username='currentUser' 
AND    (SELECT level from security s JOIN users u on  s.id=u.security_id where u.username='currentUser' GROUP BY level ) >= (SELECT level from security s JOIN pages p on  s.id=p.security_id JOIN users u on  s.id=u.security_id where u.username='currentUser' GROUP BY level)

答案 1 :(得分:0)

试试这个

select
   p.name
from
   pages p,
   security s,
   users u
where u.security_id = s.id
  and p.security_id = s.id
  and u.username = 'someuser'