如果日期相等,group_concat concat sum

时间:2014-04-13 23:43:14

标签: mysql

我有这个group_concat与concat工作正常,除了我需要找到一种方法来获得相同的结果但sum(pest_count)scout_date是相同的。 $ scout_date来自下拉列表,该下拉列表查看日期的同一个表格,因此格式为2014-03-13。谢谢你的期待。

"SELECT group_concat(concat('<div class=\"',pest_name,'\">',pest_count,' ',pest_name,'</div>')   SEPARATOR ' ') pests,
  card_id,
  card_type,
  top_y,
  left_x,
  scout_date FROM scout_logpestnum WHERE custnum='$custnum' AND locationname='$locationname' AND scoutlogname = '$scoutlogname' AND date(scout_date) ='$scout_date' 
GROUP BY
   card_id,
   card_type,
   top_y,
   left_x,
   scout_date"

这是我的对象,回显结果

<?php echo $obj['pests']; ?>

这是我的表数据

pest_name   pest_count  card_id   card_type top_y   left_x   scout_date
Aphids      2              1       yellcard  652    703     2014-3-13 15:59:54
Thrips      4              1       yellcard  652    703     2014-3-13 15:59:54
Thrips      2              2       bluecard  754    707     2014-3-13 15:59:54
Thrips      1              3       yellcard  531    616     2014-3-13 15:59:54
Thrips      1              5       yellcard   80    613     2014-3-13 15:59:54
Aphids      1              1       yellcard  652    703     2014-3-13 16:00:04
Thrips      2              1       yellcard  652    703     2014-3-13 16:00:04

以下是查询现在将为card_id 1返回的内容

 2 Aphids
 4 Thrips
 1 Aphids
 2 Thrips

这是'期望的结果

这是我最终想要的每张牌上的每个pest_name和pest_count。对于2014-3-13日期,这将是card_id 1

3 Aphids
6 Thrips

这是我现在的最终版本,感谢John提供急需的帮助。

SELECT card_id,left_x,top_y,card_type, 
GROUP_CONCAT(CONCAT('<div class=\"',pest_name,'\">',pest_count,' ',pest_name,'</div>')   SEPARATOR ' ') pests FROM(
SELECT card_id,left_x,top_y,card_type, pest_name AS pest_name, sum(pest_count) AS pest_count, scout_date
FROM scout_logpestnumtest
GROUP BY pest_name,card_id, date(scout_date)
) as t
  GROUP by card_id

1 个答案:

答案 0 :(得分:1)

我相信你要做的是按日期时间字段的日期分组,而不是包括时间戳..当你DATE(scout_date)时,它会忽略时间戳并只对日期进行分组..所以,因为那是只有不同的字段会导致分组显示4而不是2结果似乎那就是那里的问题。

SELECT 
    group_concat(
        concat('<div class=\"',pest_name,'\">',pest_count,' ',pest_name,'</div>')   SEPARATOR ' '
    ) pests,
    card_id,
    card_type,
    top_y,
    left_x,
    scout_date 
FROM scout_logpestnum 
WHERE custnum='$custnum' 
    AND locationname='$locationname' 
    AND scoutlogname = '$scoutlogname' 
    AND date(scout_date) ='$scout_date' 
GROUP BY card_id, DATE(scout_date)

修改: 我的建议是首先对数据求和然后像这样做concat。例如,请参阅FIDDLE

SELECT
    card_id, 
    group_concat(
        concat('<div class=\"',pest_name,'\">',pest_count,' ',pest_name,'</div>')   SEPARATOR ' '
    ) pests 
FROM(
    SELECT 
        pest_name AS pest_name, 
        sum(pest_count) AS pest_count, 
        card_id,
        card_type,
        top_y,
        left_x,
        scout_date
    FROM scout_logpestnum
    WHERE custnum='$custnum' 
        AND locationname='$locationname' 
        AND scoutlogname = '$scoutlogname' 
        AND date(scout_date) ='$scout_date'
    GROUP BY card_id, card_type, top_y, left_x, date(scout_date)
) as t
GROUP BY card_id

编辑:FIDDLE按卡ID显示数据..所以我的编辑应该与上面的查询一起使用..我删除了组concat,以便您可以更好地阅读它。 ..它按卡片分组,名称和日期,以便您返回正确的div个数。