Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
Mysql 同一项目中的员工和经理?SQL_Mysql_Sql_Database - Fatal编程技术网

Mysql 同一项目中的员工和经理?SQL

Mysql 同一项目中的员工和经理?SQL,mysql,sql,database,Mysql,Sql,Database,我做了一些挖掘,但无法在脑海中安排它。。。我的问题是找到同一项目中的员工和经理?我有两个表,分别是Employee和Project。他们喜欢 *Employee* ---------- employee_id (PK) name manager_id (FK) ref employee_id in same table which is employee_id. usertyp

我做了一些挖掘,但无法在脑海中安排它。。。我的问题是找到同一项目中的员工和经理?我有两个表,分别是Employee和Project。他们喜欢

   *Employee*               
   ----------               
   employee_id (PK)          
   name
   manager_id (FK)   ref employee_id in same table which is employee_id.
   usertype    

   *Project*
   ----------
   project_id(PK)
   project_name
   employee_id(FK)   ref employee_id in emplyee table
   manager_id(FK)    ref employee_id in emplyee table
让我更具体一点。项目必须有一名经理和多名员工。如何在查询中写入?usertype列指定此员工经理或USERnormal员工

查询运行示例:

       ______    ______________    ____________
       |name|    |manager_name|   |project_name|  
        John         Susan       CalendarIphone
        Mike         Susan       CalendarIphone
        Joe         Patrick        AndoridApp
        Megan        Susan        CalendarIphone
        Melek       Patrick        AndoridApp
正如您所见,Mike可以在多个项目中工作,并且可以有多个经理。但管理者必须只拥有一个项目。那么我应该怎么做才能得到这个呢?先谢谢你

编辑----------------------------------------

我有一个项目,其中有下拉列表。我在这里选择了一个项目,它给我显示了一个根据这个项目的表格,并列出了我这个项目的经理,那个项目的员工。我问项目名称,只要再创建一列就可以忽略它。我只想看到it经理和it员工

编辑2------------------------------

例如,项目ID=2,在这个项目中,我们有1名经理和员工

   |name|    |manager_name|    
    John         Susan      
    Mike         Susan       
    Joe          Susan       
    Megan        Susan       
    Melek        Susan

由于每个项目行都有员工和经理,因此只需在两个不同的键上转到employee表即可获得员工和经理的姓名。然后,很自然地以项目为基础进行查询,因为这是您正在收集的信息,所以您可以从中提取项目名称。

您的模式不好。应该是这样的:

   Employee*               
   ----------               
   employee_id (PK)          
   name
   manager_id (FK)   ref employee_id in employee table

   *Project*
   ----------
   project_id(PK)
   project_name
   manager_id(FK)    ref employee_id in employee table

   *Project_Employee*
   ----------
   project_id(FK)  ref project_id in project table
   employee_id(FK) ref employee_id in employee table
然后你可以做:

   select
       e.name as name,
       em.name as manager_name
       p.project_name
       pm.name as project_manager_name
   from Employee as e
       left outer join Employee as em on em.employee_id = e.manager_id
       left outer join Project_Employee as pe on pe.employee_id = e.employee_id
       left outer join Project as p on p.project_id = pe.project_id
       left outer join Employee as pm on pm.employee_id = p.manager_id
但对于每个员工,可能有多个项目,员工可以在这个查询中重复

更新

更新2


如果Mike的经理因项目而异,那么它在employee表和project表中都没有位置。它应该在项目员工表中,我不知道经理也是员工?经理id应该指员工id吗?谢谢你的回答。。。你建议避免重复什么?在你的问题中有重复的标记。你可以使用group_concat让employe的所有项目都以逗号分隔,例如,我不知道你的目标是什么。我明白你的意思。请看一下我的编辑。提前感谢检查更新的查询。我仍然没有得到您的确切要求,我的查询将返回您的员工列表,bit属性是_manager谢谢您的回答,它会有所帮助。让我再问你们一次:我想在同一个项目中得到经理和员工的名字。但经理不能有超过1个项目。员工可以在多个项目上工作。当我运行查询时,它应该在我的上次更新中返回:请参阅答案
   select
       e.name as name,
       em.name as manager_name
       p.project_name
       pm.name as project_manager_name
   from Employee as e
       left outer join Employee as em on em.employee_id = e.manager_id
       left outer join Project_Employee as pe on pe.employee_id = e.employee_id
       left outer join Project as p on p.project_id = pe.project_id
       left outer join Employee as pm on pm.employee_id = p.manager_id
 select
     e.name, u.is_manager
 from (
     select employee_id, 0 as is_manager from Project_Employee as pe where pe.idproject_id= <project id>
     union all
     select manager_id, 1 as is_manager from Project as p where p.project_id= <project id>
 ) as u
     inner join Employee as e on e.employee_id = u.employee_id
 order by u.is_manager desc
select
    e.name as employee_name,
    pm.name as manager_name
from Project_Employee as pe
    left outer join Employee as e on e.employee_id = pe.employee_id
    left outer join Project as p on p.project_id = pe.project_id
    left outer join Employee as pm on pm.employee_id = p.manager_id
where pe.project_id = <project id>