1

特定のルールに基づいて納期を計算する効率的な MySQL クエリの作成に問題があります。PHP ソリューションの方が効率的であれば、それも受け入れます。まだまだ勉強中ですので、お手柔らかにお願いします。

これが私のJobsテーブルです:

ジョブ表:

+--------------+
|  Field       |
+--------------+
|  Job_ID      | 
|  Customer_ID |
|  Rep_ID      |<- Used for Filtering
|  Premium     |<- Tinyint(1) (0 by default, 1 if Premium)
|  Due_Date    |
|  Ship_Date   |
+--------------+

時間通りの配達を計算するためのルールは次のとおりです。

*Working Day = Weekdays (I would like to exclude holidays but for now, let's just go with all Weekdays)

Rule 1: (Simple) If a Job is of the Premium Type:
    Ship_Date before Due_Date = Early
    Ship_Date same as Due_Date = On Time
    Ship_Date after Due_Date = Late

Rule 2: (Complex) If a Job is of the Standard Type:
    Ship_Date before Due_Date minus 2 Working Days = Early
    Ship_Date within Due_Date minus 2 Working Days and Due_Date plus 1 Working Day = On Time
    Ship_Date after Due_Date plus 1 Working Day = Late

Example:
   Due_Date=Nov 9, 2012 and Premium=0
   if Ship_Date is Nov 1, 2012 then Status is Early by (4) Days
   if Ship_Date is Nov 6, 2012 then Status is Early by (1) Day
   if Ship_Date is Nov 7, 2012 then Status is On Time 
   if Ship_Date is Nov 12, 2012 then Status is On Time 
   if Ship_Date is Nov 13, 2012 then Status is Late by (1) Day
   if Ship_Date is Nov 20, 2012 then Status is Late by (6) Days

希望するレポート形式の例: ヘッダーで早期、定刻、および遅延ジョブの数を取得しようとしています。ご注文は発送日までです。

On Time Delivery Report    

October (Early: 1 / On Time: 2 / Late: 0) 
+------+-----------+---------+----------+-----------+-----------+------+--------+ 
| Job #| Cust Name | Premium | Due_Date | Ship_Date |Qty Shipped|Status|DaysDiff|
+------+-----------+---------+----------+-----------+-----------+------+--------+
 <List all jobs shipped in October> 


November (Early: 0 / On Time: 3 / Late: 0)
+------+-----------+---------+----------+-----------+-----------+------+--------+ 
| Job #| Cust Name | Premium | Due_Date | Ship_Date |Qty Shipped|Status|DaysDiff|
+------+-----------+---------+----------+-----------+-----------+------+--------+
 <List all jobs shipped in November> 

誰かが私に解決策を提案できますか? その場合、MySQL または PHP にほとんどの作業を任せるべきですか? 上記のルール 1 と 2 も考慮に入れるエレガントなソリューションを探しています。

パフォーマンスを向上させるために、時間通りの配達ステータスと日差をテーブルとストアに非正規化する必要がありますか? 長い投稿で申し訳ありません。まだまだ勉強中ですが、アドバイスをいただければ幸いです。

4

0 に答える 0