多个SELECT语句的问题

时间:2016-01-20 14:44:26

标签: php sql select syntax where-clause

大家好,我目前正在解决路边缺陷项目,并在我的研究中遇到了障碍。 我试图从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_Idreport_Id为索引

在报告表格中,主要密钥为report_Id,其报告位置为member_Id

非常感谢提前。

1 个答案:

答案 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子句抛弃了匹配的作业记录的情况,留下您感兴趣的结果。