Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跨多个表的MySQL查询存在问题_Php_Mysql_Sql_Relational Database - Fatal编程技术网

Php 跨多个表的MySQL查询存在问题

Php 跨多个表的MySQL查询存在问题,php,mysql,sql,relational-database,Php,Mysql,Sql,Relational Database,对不起,对于那些MySQL或SQL大师来说,这可能是一个微不足道的问题。我有三张桌子: 用户 页面 安全性 安全性有几个级别,如:来宾、标准用户、管理员等。这是一个整数值。所以基本上,来宾是0,标准是1,管理员是10 每个用户都有一个用于在安全性表中查找的安全id 每个页面都有一个安全id,用于查找给定用户可以看到的页面 我想创建一个查询,使用当前用户名返回该用户可以看到的页面。因此,基本上返回所有安全级别低于或等于用户安全级别的页面。但我并不是在每个表中存储级别,而是存储安全表唯一项的ID

对不起,对于那些MySQL或SQL大师来说,这可能是一个微不足道的问题。我有三张桌子:

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

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

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

我想创建一个查询,使用当前用户名返回该用户可以看到的页面。因此,基本上返回所有安全级别低于或等于用户安全级别的页面。但我并不是在每个表中存储级别,而是存储安全表唯一项的ID

我附上了我的DB模式的屏幕截图:

样本数据:

用户表:

页数表:

安全表:

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查找。我可以修改这个结构,只是为了保持关系数据库的模块化和一致性。