2017-05-29 65 views
0

我有一個使用Monaca/Onsen UI和AngularJS構建的跨平臺企業應用程序,允許用戶每週提交他們在周內使用的機器的每週報告。檢查包括各種安全檢查,例如,機器上的當前小時數,安全裝置存在等。選擇* from表where日期=本週和?

這部分的應用程序工作完美,用戶可以通過專用平板電腦和智能手機提交他們的每週報告。

每週報告數據發送到SQL數據庫,我有一個使用Laravel框架在Sximo Builder上構建並託管在AWS上的CMS。管理員用戶使用提交的報告數據查看報告並確保每週都提交所有機器的所有報告。

我需要一個查詢,其中管理員用戶可以快速過濾所有機器,具有任何給定的週數提交的報告。

但是,由於我的表格只包含提交的報告,我如何檢查哪些機器尚未提交?

我提交的報告表如下面的一些虛擬數據。

色譜柱:ID,NAME,機器ID,小時,提交日期,星期NO與值175,Jane Doe的,H93,2600,真,2017年3月5日15時36分,21

我也有一個機器表,看起來像下面,只是持有機器的細節。

列:ID,機器ID,型號與值1,H93,理光,H1254

如何顯示機器管理員的用戶列表中的任何一週,其中報告有已提交。

+0

見LEFT JOIN ... WHERE ... IS NULL。仍在掙扎?請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

回答

1

您可以將報表與機器一起留在表格中。
並加入機器ID和週數。
如果沒有匹配,則報告ID將爲空。

例如:

一些測試數據:

drop table if exists machineryreport; 
create table machineryreport (ID int, NAME varchar(30), `MACHINE ID` varchar(4), HOURS int, SUBMITTED BOOLEAN, `DATE` date, `WEEK NO` int); 
insert into machineryreport (ID, NAME, `MACHINE ID`, HOURS, SUBMITTED, `DATE`, `WEEK NO`) values 
(175, 'John Doe', 'H92', 2600, True, '2017-03-05 15:36', 21), 
(176, 'Jane Doe', 'H93', 2700, True, '2017-03-05 15:38', 21), 
(177, 'Jake Doe', 'H95', 2900, True, '2017-03-06 15:42', 21); 

drop table if exists machinery; 
create table machinery (ID int, `MACHINE ID` varchar(4), MAKE varchar(30), MODEL varchar(8)); 
insert into machinery (ID, `MACHINE ID`, MAKE, MODEL) values 
(1,'H92','Alderado','H1254'), 
(2,'H93','Ricoh','H1254'), 
(3,'H94','Consuela','H1254'), 
(4,'H95','Josep','H1254'); 

使用LEFT JOIN:

select m.* 
from machinery m 
left join machineryreport r 
    on (m.`MACHINE ID` = r.`MACHINE ID` and 
     r.`WEEK NO` = 21) 
where r.ID is null; 

或者使用NOT IN的子查詢:

select * 
from machinery 
where `MACHINE ID` not in (
    select distinct `MACHINE ID` 
    from machineryreport 
    where `WEEK NO` = 21 
); 

或者使用NOT EXISTS:

select * 
from machinery m 
where not exists (
    select 1 
    from machineryreport r 
    where m.`MACHINE ID` = r.`MACHINE ID` 
     and r.`WEEK NO` = 21 
); 

返回:

ID MACHINE ID MAKE  MODEL 
-- ---------- ----  ----- 
3 H94  Consuela H1254