2013-05-07 61 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