1

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

  • 用户
  • 页面
  • 安全

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

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

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

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

我附上了我的数据库模式的截图:

数据库架构

样本数据:

用户表: 用户表数据

页表:

页表数据

安全表:

安全表数据

4

2 回答 2

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)
于 2013-10-24T19:35:34.043 回答
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'
于 2013-10-24T19:37:10.910 回答