2014-08-28 58 views
-1

我在这里有3张桌子。用户表,员工表和报表。如何在SQL中的不同表中选择多个值?

用户表有4列:

ID, Username, Password, Role 
1 test  test Admin 
2 branch  branch Manager 
3 hello  hello Manager 

Employee表中有4列:

ID, Firstname, Lastname, Supervisor_ID 
1 test  test  
2 branch  branch 
3 hello  hello 
4 agent1  agent1  2 
5 agent2  agent2  2 
6 agent3  agent3  3 
7 agent4  agent4  3 

报告表有4列:

Report_ID, ID, Branch_ID, Client_ID 
    1  1  1   1 
    2  2  1   1 
    3  3  2   3 
    4  4  1   2 
    5  5  3   4 
    6  6  3   2 
    7  7  2   5 

现在,我想所需的输出如果登录的用户是经理,那么他可以看到的报告只是他的下的报告和他监督下的代理人。我在这里有一个代码只从表中选择两个值。

 $user = $_SESSION['username']; 

     $statement="SELECT * FROM user WHERE Username='".$user."'"; 
     $result1 = mysqlparser($statement, $db); 

     $id = $result1[0]['Employee_ID']; 

     $statement="SELECT * FROM employee WHERE Supervisor_ID='".$id."'"; 
     $result2 = mysqlparser($statement, $db); 

     $id1 = $result2[0]['Employee_ID']; 


     $statement = "SELECT * FROM report WHERE DATE(`Report_Timestamp`) = CURDATE() AND Employee_ID='".$id."' OR Employee_ID='".$id1."'"; 
     $result = mysqlparser($statement, $db); 

例如: 我登录其中有2。现在我想看到从我的ID我的监督下,这是AGENT1和agent2报告和其他员工的ID分支。

+2

你可能想看看'JOIN's HTTP://www.sitepoint。 com/understanding-sql-joins-mysql-database/ – hsan 2014-08-28 08:37:14

回答

1

试试这个:

SELECT * FROM Report 
WHERE Employee_ID IN (
    SELECT T1.Id from Employee T1 
    WHERE T1.supervisor_id = **MyId**) 

这会给你所有具有身份识别码为监控员工的报告。 如果你想添加身份识别码报告,以及,只需添加一个OR子句中的查询或子查询:

SELECT * FROM Report 
WHERE Employee_ID IN (
    SELECT T1.Id from Employee T1 
    WHERE T1.supervisor_id = **MyId**) 
OR Employee_Id = **MyId** 
+0

非常感谢!我不知道你仍然可以在select语句中创建另一个select语句。现在我明白了。另一个补充我的知识。 – user3771102 2014-08-28 09:13:23

相关问题