繁体   English   中英

如果日期相等,则group_concat concat总和

[英]group_concat concat sum if dates are equal

我有这个带有concat的group_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

我相信您想要做的是按datetime字段的DATE分组,而不是包括时间戳..当您执行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)

编辑 :我的建议是首先对数据求和,然后再进行连接。 例如参见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

编辑:字段按卡ID显示数据。因此,我的编辑应适用于以上查询。.我删除了concat组,以便您可以更好地阅读...按卡以及名称和日期进行分组这样,您将获得正确数量的div返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM