2017-05-29 32 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