2013-05-07 41 views
0

情況:GROUP_CONCAT值

有兩個表,HeadItem,其中每個頭與一個或多個項目。我想要顯示每個項目每個月的每個項目數量的總和,以及大於特定值的所有數量的列表。

頭:

| OrderID | Timestamp | <several other columns> | 
------------------------------------------------- 
|  1 | 6548972 | ...      | 
|  10 | 6548978 | ...      | 
|  ... |  ... | ...      | 
------------------------------------------------- 

項目:

| ItemId | OrderID | Quantity | <several other columns> | 
--------------------------------------------------------- 
|  21 |  1 |  5 | ...      | 
|  22 |  1 |  3 | ...      | 
|  25 |  10 |  1 | ...      | 
| ... |  ... |  ... | ...      | 
--------------------------------------------------------- 

查詢:

SELECT 
    SUM(Item.Quantity) AS `total`, 
    GROUP_CONCAT(Item.Quantity ORDER BY Item.Quantity DESC SEPARATOR ', ') AS `quantities`, 
    FROM_UNIXTIME(Head.Timestamp, '%m') AS `month`, 
    COUNT(Head.OrderID) AS `orders`, 
    Item.ItemID, 
FROM 
    Item LEFT JOIN (Head) ON (Head.OrderID = Item.OrderID) 
WHERE 
    (Head.Timestamp BETWEEN <sometime> AND <someothertime>) 
GROUP BY 
    `month`, 
    Item.ItemID 
ORDER BY 
    `total` ASC 

我的工作:

鑑於上述情況,並查詢我才得以實現我的目標除了tha t GROUP_CONCAT給出所有數量的列表,這是不希望的。相反,我要大於顯示所有量假設4

當前的結果:

| total | quantities | month | orders | ItemID | 
------------------------------------------------ 
|  8 | 5, 2, 1 | 04 |  3 |  21 | 
|  3 | 3   | 04 |  1 |  22 | 
| 20 | 10, 9, 1 | 04 |  3 |  25 | 

期望的結果:

| total | quantitiesGreater4 | month | orders | ItemID | 
-------------------------------------------------------- 
|  8 | 5     | 04 |  3 |  21 | 
|  3 |     | 04 |  1 |  22 | 
| 20 | 10, 9    | 04 |  3 |  25 | 

最後一個問題:

有沒有辦法修改原始查詢顯示所需的結果?或者,這樣的工作更好的執行我的PHP腳本?

更新: 我不想數量< = 4被過濾掉總的,我只是不希望他們在數量列表

+0

'我希望所有顯示的數量都大於'假設4'數量小於4的記錄會發生什麼情況? – Ejaz 2013-05-07 12:40:33

+0

您是否嘗試在WHERE子句中添加'AND Item.Quantity> 4'? – jtavares 2013-05-07 12:41:59

+0

我不希望將具有數量<= 4的項目過濾掉。我只是不希望他們出現在我的數量欄中。 (我會更新問題) – xmoex 2013-05-07 12:50:23

回答

1

修改您GROUP_CONCAT條款如下:

GROUP_CONCAT(
    IF(Item.Quantity > 4, Item.Quantity, NULL) 
    ORDER BY Item.Quantity DESC SEPARATOR ', ' 
) 

這是可行的,因爲GROUP_CONCAT()ignores NULL values

+0

thx爲解釋,您的解決方案適用於我 – xmoex 2013-05-07 13:18:22