【问题标题】:Select * from table where date = this week and?从日期 = 本周的表格中选择 *?
【发布时间】:2017-10-29 14:35:55
【问题描述】:

我有一个使用 Monaca/Onsen UI 和 AngularJS 构建的跨平台企业应用程序,它允许用户提交关于他们在一周内使用的机器的每周报告。检查包括各种安全检查,例如机器上的当前时间、安全装置等。

应用程序的这一部分运行良好,用户可以通过专用平板电脑和智能手机提交他们的每周报告。

每周报告数据被发送到 SQL 数据库,我有一个使用 Laravel 框架在 Sximo Builder 上构建并托管在 AWS 上的 CMS。管理员用户使用提交的报告数据来查看报告并确保每周提交所有机器的所有报告。

我需要一个查询,管理员用户可以在其中快速过滤所有针对任何给定周数提交NO报告的机器。

但由于我的表格只包含提交的报告,我如何检查哪些机器尚未提交?

我提交报告的表格如下所示,其中包含一些虚拟数据。

列:ID、NAME、MACHINE ID、HOURS、SUBMITTED、DATE、WEEK NO,值为 175、Jane Doe、H93、2600、True、03/05/2017 15: 36、21

我还有一个如下所示的机械表,其中仅包含机械详细信息。

列:ID、MACHINE ID、MAKE、MODEL,值为 1、H93、Ricoh、H1254

在报告提交的任何一周内,如何向管理员用户显示机器列表。

【问题讨论】:

标签: php mysql


【解决方案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');

使用左连接:

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

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多