我想與Doctrine建立查詢,但我不知道是否可以完成。Doctrine2:SUM在左加入查詢
我需要的是得到一個結果,顯示一個請求物品的ID和它的SUM數量已經滿足。
我有四個表:
- 請求
- RequestItems
- 訂購
- 的OrderItems
我可以創建一個請求,並指定一個或多個項目到這個請求它們存儲在RequestItems,然後我需要創建一個訂單這個請求,則訂單必須致力於滿足要求的項目,但它可能是與單個訂單或多重的,因此每個訂購包含一個或多個存儲在訂單項的物品。
以下是表的一個示例:
Request
| ID | Date |
|----|------------|
| 1 | 2014-05-12 |
| 2 | 2014-05-13 |
RequestItems
| ID | RequestID | Name |Qtty |
|----|-----------|---------------------|-----|
| 1 | 1 | 60W Light Bulb | 5 |
| 2 | 1 | Bticino switch | 3 |
| 3 | 2 | 60W Light Bulb | 10 |
| 4 | 2 | 80W Light Bulb Warm | 15 |
Order
| ID | RequestId | Date | State |
|----|-----------|------------|-------|
| 1 | 1 | 2014-05-14 | 1 |
| 2 | 1 | 2014-05-15 | 1 |
| 3 | 2 | 2014-05-15 | 1 |
| 4 | 2 | 2014-05-16 | 1 |
| 5 | 2 | 2014-05-17 | 1 |
OrderItems
| ID | RequestItemsID | OrderID | Qtty |
|----|----------------|---------|------|
| 1 | 1 | 1 | 5 |
| 2 | 2 | 2 | 3 |
| 3 | 3 | 3 | 2 |
| 4 | 3 | 4 | 2 |
| 5 | 3 | 5 | 1 |
| 6 | 4 | 5 | 10 |
這裏我有兩個要求: 第1號:已請求(5個60W燈泡,3個BTICINO開關) 第2號兩個項目:有一個項目要求(10 60W燈泡,15 80W暖燈泡)
對於這些要求,我已經創建了5個訂單,其中兩個履行第一個要求,3個履行第二個要求。
前兩個訂單處理了第一個請求並提供了請求的項目,因此第一個請求應該完成。
最後三個訂單正在處理第二個請求,並提供了10個60W燈泡中的5個和80W溫暖燈泡中的10個。
什麼我需要在這裏得到ID和RequestItems的數量和Qtty的由RequestItem ID分組過濾通過訂單狀態的OrderItems和請求ID
作爲樣品我需要得到的總和多少RequestedItems所提出的要求,並已訂購了請求第2號,其中其訂單狀態爲1個
| RequestItemsID | QttyRequested | QttyOrdered (SUM) |
|----------------|---------------|-------------------|
| 3 | 10 | 5 |
| 4 | 15 | 10 |
這一結果分組通過其ID請求的項目,並返回請求的數量,還總和已經下令ammounts 訂購項目爲此RequestItem
鑑於此結果,我也可以計算未決項目。
我已經設法解決這個問題,構建兩個查詢一個獲取RequestedItems,一個獲取OrderedItems並將這兩個與PHP匹配,但我認爲可以在數據庫端執行此操作。
如果有人能幫助我,這將是非常感謝。
謝謝。
更新#1:
我有問題,裏面使用的QueryBuilder當聯合子,但我設法建立一個工作查詢,將在連接條件的子查詢。
我在下面添加我的工作查詢,但我仍然需要做多個檢查,看看它是否真的是我的答案。
謝謝你,我想你的查詢,但是它沒有得到解決工作,首先我需要改變GroupBy,因爲我需要通過RequestItem ID進行分組,而不是RequestID,之後我發現了兩個問題,SUM在每一行執行,所以如果我有多個RequestItem,每個都有相同的SUM結果,第二,如果沒有添加OrderItems我沒有得到RequestItem在結果集中。 我正在更新OP以更具體 – 2014-09-05 02:13:47