2017-05-29 11 views
0

Monaca/Onsen UIとAngularJSを使用して構築されたクロスプラットフォームのエンタープライズアプリケーションを使用して、週に使用する機械に関する週次レポートを提出できます。チェックには、様々な安全チェックが含まれる。現在の時間、安全ギアなど*ここから日付=今週と?

このアプリのこの部分は完璧に機能しており、ユーザーは専用のタブレットとスマートフォンで週間レポートを送信できます。

週単位のレポートデータがSQLデータベースに送信され、Laravelフレームワークを使用してAWSでホストされているSximo BuilderにCMSが構築されています。管理ユーザーは、送信されたレポートデータを使用してレポートを表示し、すべての機械に関するすべてのレポートが毎週提出されるようにします。

adminユーザーがNOレポートを任意の週番号に送信したすべての機械ですばやくフィルタリングできるクエリが必要です。

私のテーブルには提出されたレポートしか含まれていないので、どの機械が提出されていないかをどのように確認するのですか?

送信されたレポートのマイテーブルは、以下のようにいくつかのダミーデータで表示されます。

カラム:ID、NAME、マシンID、時間、提出、DATE、WEEK NO175、真のジェーンドゥ、H93、2600、2017年3月5日15時36分と、21

私はまた、機械の詳細を保持する、以下のような機械テーブルを持っています。

列:ID、マシンID、MAKE、値を持つモデル 1、H93、リコー、H1254

私はレポートが ませを持っている任意の特定の週のための管理ユーザーへの機械のリストを表示するにはどうすればよい

提出されました。

+0

を参照してくださいLEFT JOINは... ...は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はnullになります。例えば

いくつかのテストデータ:

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を使用します:LEFTを使用して

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'); 

JOINを

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 
関連する問題