Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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
使用pdo在同一个表上进行php mysql连接查询_Php_Mysql - Fatal编程技术网

使用pdo在同一个表上进行php mysql连接查询

使用pdo在同一个表上进行php mysql连接查询,php,mysql,Php,Mysql,这是我的表,其中ID是表的主键,SUPER_ID用于管理层次结构。例如,这里,A是B的超级用户,B是C的超级用户,而A是C的超级超级用户。。。。。。。。。。。。 ID和SUPER_ID可能不必是连续的 现在的问题是,当A登录时,他可以看到自己以及B和C的详细信息,而B登录时,他只能看到自己和C的详细信息。C只能看到他自己的细节 我写了这个查询: <?php $sql="SELECT * from TABLE WHERE ID =:loginId OR

这是我的表,其中ID是表的主键,SUPER_ID用于管理层次结构。例如,这里,A是B的超级用户,B是C的超级用户,而A是C的超级超级用户。。。。。。。。。。。。 ID和SUPER_ID可能不必是连续的

现在的问题是,当A登录时,他可以看到自己以及B和C的详细信息,而B登录时,他只能看到自己和C的详细信息。C只能看到他自己的细节

我写了这个查询:

<?php
$sql="SELECT * from TABLE 
WHERE 
ID =:loginId OR                                                  
ID IN 
(
SELECT ID FROM TABLE 
WHERE SUPER_ID =:SuperId
)";
$stmt = $conn->prepare($sql);
$stmt->execute(array(':logedIn' => $_SESSION['sess_login_id'] , ':SuperId' => $_SESSION['sess_login_id']) );
?>
当我以用户A的身份登录时,此查询为我提供A和B的结果。 当我以用户A的身份登录时,我应该编写什么查询以便获得A、B和C的结果? 因为A是B的超级用户,C的超级用户。请帮助。谢谢。

首先从用户处获取SUPR\u ID,然后检查哪个SUPR\u ID更大或相同

SELECT * FROM `TABLE` WHERE SUPR_ID >= (SELECT SUPR_ID FROM `TABLE` WHERE ID=:loginId)

如果您只有三个层次结构级别,则可以这样做:

选择不同的u* 来自用户loggedin 左连接children.SUPR\u ID=loggedin.ID上的用户子级 在sunferens.SUPR\u ID=children.ID上左加入用户sunferens 在loggedin.ID、children.ID、sunderrens.ID中的u.ID上加入用户u 其中loggedin.ID=:loginId
当D以C为超级时会发生什么?对不起,我忘了提一下,只有三级层次结构。如果SUPER\u ID总是按顺序变大,那么查询可以简化为类似select*from TABLE,其中ID=loginiId或SUPER\u ID>superdsuper\u ID总是按顺序变大,那么查询就没有必要了。因为它可以从前端编辑,所以任何用户都可以根据其角色分配给任何用户;否则你的解决方案是好的!ID和SUPER\u ID不必是连续的。如果SUPER\u ID不是连续的。您如何确定哪个在hirarchy中更高?没有这样的规范,但在同一个表中有一个字段定义角色,例如P>Q>R。因此不能有child,P可以有child作为Q角色用户或R角色用户,Q只能有R角色用户作为子用户。谢谢您,先生。。它起作用了。如果你能解释这个问题,我将不胜感激。我不太擅长查询。我重命名了表别名。希望这能帮助你理解它。将SELECT DISTINCT u.*替换为SELECT*以查看MySQL在后台做了什么。