我有一个跨平台的企业应用程序,它使用Monaca/Onsen和AngularJS构建,允许用户每周提交一次关于他们在一周内使用的机器的报告。这些检查包括各种安全检查,例如目前的机器工作时间、安全设备的存在等。
这部分应用程序运行得很好,用户可以通过专用平板电脑和智能手机提交每周报告。
每周报告数据被发送到一个SQL数据库,我使用Laravel框架在Sximo Builder上构建了一个CMS,并且托管在AWS上。管理员用户使用提交的报告数据来查看报告,并确保每周提交所有机器的所有报告。
我需要一个查询,管理员用户可以快速过滤的所有机器,有,没有报告提交的任何给定的星期数。
但是,由于我的表格只载有已提交的报告,我如何检查哪些机制尚未提交?
我提交的报告的表如下所示,其中包含一些虚拟数据。
列:ID、名称、机器ID、时数、提交时间、日期、周和值175、Jane Doe、H93、2600、True,03/05/2017 15:36、21
我也有一个机器桌子,看起来如下,它只是保存机器的细节。
列:ID、机器ID、MAKE、带有值1的模型、H93、理光、H1254
如果报告已经提交了,而不是,我如何向管理员用户显示机器列表。
发布于 2017-05-29 10:55:20
您可以使用机器将报告表加入到表中。
并加入机器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');使用左联接:
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
);或使用“不存在”:
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 H1254https://stackoverflow.com/questions/44239872
复制相似问题