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

时间:2015-11-21 08:30:35

标签: 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 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的超级用户。请帮忙。谢谢。

2 个答案:

答案 0 :(得分:2)

http://sqlfiddle.com/#!9/ad6a88/2/0 首先从用户获取SUPR_ID,然后检查哪个SUPR_ID更大或相同。

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

答案 1 :(得分:2)

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

SELECT DISTINCT u.*
FROM user loggedin
LEFT JOIN user children      ON children.SUPR_ID      = loggedin.ID
LEFT JOIN user grandchildren ON grandchildren.SUPR_ID = children.ID
JOIN user u ON u.ID IN (loggedin.ID, children.ID, grandchildren.ID)
WHERE loggedin.ID = :loginId

http://sqlfiddle.com/#!9/3d93c/7