Php 跨多个表的MySQL查询存在问题
对不起,对于那些MySQL或SQL大师来说,这可能是一个微不足道的问题。我有三张桌子:Php 跨多个表的MySQL查询存在问题,php,mysql,sql,relational-database,Php,Mysql,Sql,Relational Database,对不起,对于那些MySQL或SQL大师来说,这可能是一个微不足道的问题。我有三张桌子: 用户 页面 安全性 安全性有几个级别,如:来宾、标准用户、管理员等。这是一个整数值。所以基本上,来宾是0,标准是1,管理员是10 每个用户都有一个用于在安全性表中查找的安全id 每个页面都有一个安全id,用于查找给定用户可以看到的页面 我想创建一个查询,使用当前用户名返回该用户可以看到的页面。因此,基本上返回所有安全级别低于或等于用户安全级别的页面。但我并不是在每个表中存储级别,而是存储安全表唯一项的ID
- 用户
- 页面
- 安全性
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)
试试这个
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'
我应该澄清一下,但这是基于安全ID的,这很好,但安全表的内部是一个级别int值。我想返回安全级别低于或等于用户当前安全级别的所有页面。用户的安全级别在哪里?安全表中存储级别。users表存储id而不是级别,以防以后添加不同的安全级别。因此,基本上用户存储了security_id,它是security表中的id,但是在security表中,级别是storedOK,刚刚添加到上面的问题中。您应该对此进行一些解释。这将返回具有相同id的所有页面是的,但我希望返回用户可以根据security.level看到的页面列表。因此,返回的页面是如此安全。级别必须是页面的安全级别必须小于用户的安全级别。但是在页面和用户的表中,我们存储的是安全级别的ID,而不是级别,安全级别由每个表中的ID查找。我可以修改这个结构,只是为了保持关系数据库的模块化和一致性。