仅选择存在2列特定组合的值?

时间:2017-01-17 20:05:31

标签: php mysql

我有一个表'timesheets',我想根据名为employees_projects的另一个数据透视表(引用employeeID和projectID)插入空白记录。我想在时间表表中生成一个INSERT / UPDATE查询,该表基本上使用EmployeeID作为输入,然后显示员工通过employees_projects表分配给他们的所有项目。

例如,名为Foo的员工的employeeID为1.有一个名为Bar的项目,其projectID为1.员工ID为1且projectID = 1的employees_projects中存在记录。现在,当Foo加载时间表php文件时(在会话中已经存储了他的$ employeeID之后),我想只填充项目Bar的时间表记录。这是我用来构建时间表表的PHP代码,你可以看到我正在使用的列:

 $result = $conn->query("select timesheets.id, Monday, Tuesday, Wednesday, Thursday, Friday, WeekEndingDate, Notes, Submitted, EmployeeID, ProjectID, projects.ProjectName from timesheets INNER JOIN projects ON timesheets.ProjectID=projects.id WHERE EmployeeID=$eId");

while ($row = $result->fetch_assoc()) {

              unset($id,$Mon,$Tues,$Wed,$Thurs,$Fri,$WeekEndingDate,$notes,$employeeId,$projectId,$projectName);
              $id = $row['id'];
              $Mon = $row['Monday'];
              $Tues = $row['Tuesday'];
              $Wed = $row['Wednesday'];
              $Thurs = $row['Thursday'];
              $Fri = $row['Friday'];
              $WeekEndingDate= $row['WeekEndingDate'];
              $notes = $row['Notes'];
              $employeeId = $row['EmployeeID'];
              $projectId = $row['ProjectID'];
              $projectName = $row['ProjectName'];

              echo '<tr><td>'. $projectId.'</td><td>'.$projectName.'</td><td><input type="text" id="Mon" value='.$Mon.'></td><td><input type="text" id="Mon" value='.$Tues.'></td><td><input type="text" id="Mon" value='.$Wed.'></td><td><input type="text" id="Mon" value='.$Thurs.'></td><td><input type="text" id="Mon" value='.$Fri.'></td><td>'.$notes.'</td></tr>';

正如您所看到的,我使用的查询已过时,因为它只是项目表的INNER JOIN,而不是employees_projects。我不知道如何更改我的查询以返回时间表中的所有列,仅用于分配给该员工的项目。

任何帮助?

修改

对不起,我会尽力澄清一下。我正在使用php来构建一个基于上面显示的$ query查询中的SELECT查询的表单。这是正确构建表单但当前显示在项目表中找到的所有项目(即projectID 1,projectID2等)。我需要一个SELECT查询,它将根据employees_projects中employeeID / projectID列的组合仅重新分配分配给员工的项目。之后,我将使用我的PHP代码在点击提交时构建一个INSERT查询。

1 个答案:

答案 0 :(得分:1)

将所有表格加在一起:

SELECT ...
FROM projects AS p
JOIN employee_projects AS ep ON p.id = ep.projectID
JOIN employees AS e ON e.id = ep.employeeID
LEFT JOIN timesheets AS t ON t.projectID = p.id and t.employeeID = e.id
WHERE p.name = 'Bar'

我为LEFT JOIN使用了timesheets,因此您仍然会为分配给该项目的每位员工获得一行,即使其中一些员工尚未填写时间表。

似乎这里有一些可以规范化的冗余,因为employee_projectstimesheets都有projectIDemployeeID个外键。如果employee_projects表中的ID只有一个外键,那就更好了。