大家好,我目前正在解决路边缺陷项目,并在我的研究中遇到了障碍。 我试图从sql代码
的不同表中选择一些值$sql = "SELECT d.defect_Id, d.priority, r.date
FROM `defect_report` AS d,
`report` AS r
WHERE d.report_Id = r.report_Id";
此代码选择下面我需要的值:
defect_Id | priority | date
64 1 2016-01-06 19:17:40
65 3 2016-01-06 19:17:47
81 2 2016-01-06 19:17:47
82 1 2016-01-06 19:17:47
83 1 2016-01-06 19:17:47
66 3 2016-01-06 19:18:30
67 5 2016-01-06 19:18:37
68 4 2016-01-06 19:18:43
69 1 2016-01-06 19:18:49
但是,当我分配一个Job时,我希望上面的表只显示未分配的作业。我使用的表单一次只显示一个作业,并允许我向作业提交修复团队,在作业表中分配作业编号并发布时间戳。
例如,一旦提交的缺陷64将被分配给作业表中的团队。如何添加到下面的代码,以便在页面重定向时不再显示此缺陷。
foreach ($cxn->query($sql) as $row )
{
echo "<tr><td><input type='text' name='defect_Id' value='$row[defect_Id]'</td>";
echo "<td>$row[priority]</td>";
echo "<td>$row[date]</td></tr>";
}
echo"</table>";
我尝试了很多选项,但我的语法错了。实际上,下面是我试图在一个sql语句中实现2个WHERE子句的可能吗?
$sql = "SELECT d.`defect_Id`,d.`priority`, r.`date`
FROM `defect_report` AS d, `report` AS r
WHERE r.`report_Id` = d.`report_ID`
OR
WHERE NOT EXISTS
(
SELECT `defect_Id`
FROM job AS j
WHERE d.`defect_Id` = j.`defect_Id` )";
在Job表中,主键为job_Id
索引为defect_Id
&amp; repair_Team
在defect_report
表格中,主键为defect_Id
,report_Id
为索引
在报告表格中,主要密钥为report_Id
,其报告位置为member_Id
。
非常感谢提前。
答案 0 :(得分:0)
您使用WHERE
子句进行连接条件。尽管可行,但使用JOIN
子句时,更复杂的查询更具可读性。
将Job表添加到您的查询中,如下所示:
SELECT d.`defect_Id`, r.`date`, d.`priority`
FROM `defect_report` AS d
JOIN `report` AS r
ON r.`report_Id` = d.`report_ID`
LEFT JOIN `job` AS j ON d.`defect_Id` = j.`defect_Id`
WHERE j.`defect_Id` IS NULL
LEFT
关键字可确保您获得那些没有相应作业记录的记录。然后WHERE
子句抛弃了匹配的作业记录的情况,留下您感兴趣的结果。