我有一个表'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查询。
答案 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_projects
和timesheets
都有projectID
和employeeID
个外键。如果employee_projects
表中的ID只有一个外键,那就更好了。