[英]Selecting only values where a specific combination of 2 columns is present?
我有一个表“时间表”,我想根据另一个称为employee_projects的数据透视表(引用employeeID和projectID)将空白记录插入其中。 我想在时间表表中生成一个INSERT / UPDATE查询,该查询本质上将使用EmployeeID作为输入,然后显示该员工已通过employee_projects表分配给他们的所有项目。
例如,名为Foo的雇员的employeeID为1。有一个名为Bar的项目的projectID为1。在employees_projects中存在一个记录,雇员ID为1,项目ID为1。 现在,当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>';
如您所见,我正在使用的查询已经过时,因为它只是项目表(而不是employee_projects)的内部联接。 我不知道如何更改查询以仅返回时间表中分配给该员工的项目的所有列。
有什么帮助吗?
编辑
抱歉,我会尽力澄清。 我使用php基于$ result代码中上面显示的SELECT查询来构建表单。 这是在正确地构建表单,但是当前显示了在项目表中找到的所有项目(即projectID 1,projectID2等)。 我需要一个SELECT查询,该查询将仅根据employee_projects中列的employeeID / projectID组合重新分配分配给员工的项目。 之后,我将使用我的php代码在点击Submit时构建一个INSERT查询。
将所有表连接在一起:
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'
我为timesheets
使用了LEFT JOIN
,因此即使分配给他们的某些员工尚未填写timesheets
,您仍然会为分配给该项目的每个员工获得一行。
似乎这里有些冗余可以归一化,因为employee_projects
和timesheets
都具有projectID
和employeeID
外键。 如果employee_projects
表中有一个唯一的ID外键,那会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.