2016-01-20 63 views
0

嗨,大家好,我目前正在通過路邊缺陷項目工作,並在我的研究中遇到了困難。 我想選擇一個數字從與SQL代碼的不同表中的值作爲多個SELECT語句的問題

$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 

但是當我分配工作,我想要的上面的表格只顯示未分配的作業。我使用的表格一次僅顯示一項作業,並允許我將修理小組提交給在作業表中爲其分配作業編號併發出時間戳的作業。

例如,一旦提交缺陷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_Iddefect_Id & repair_Team

索引在defect_report表的主鍵是defect_Idreport_Id作爲索引

在報告表中的主鍵爲report_Id,索引爲member_Id

非常感謝提前。

+2

這是相當多的代碼。你能不能把它減少到關鍵部分 – RiggsFolly

+1

也標記dbms使用。 (一些非ANSI SQL ......) – jarlh

+0

也是這些代碼片段之一,在此之後'一旦提交缺陷64將有一個分配'亂了PHP標籤明智 – RiggsFolly

回答

0

對連接條件使用WHERE子句。儘管有效,但使用JOIN子句時,更復雜的查詢更具可讀性。

添加的工作表來查詢是這樣的:

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條款將拋出有匹配的工作記錄的情況,並將您感興趣的結果留給您。

+0

上面編輯過的查詢很有用,救了我很多壓力,非常感謝所有人! –

+0

不客氣。請注意,只有在列名稱中使用了保留字或空格或非標準符號時,才需要反標記。我個人認爲他們看起來很醜,所以我儘量避免他們。 – trincot