gpt4 book ai didi

mysql - group_concat concat sum 如果日期相等

转载 作者:行者123 更新时间:2023-11-29 00:15:43 25 4
gpt4 key购买 nike

我有一个带有 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

最佳答案

我相信你想要做的是按日期时间字段的日期分组,而不是包括时间戳。当你执行 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

编辑:这个FIDDLE按卡 ID 显示数据。所以我的编辑应该适用于上述查询。我删除了组 concat 只是为了让您可以更好地阅读它...它按卡、名称和日期分组,这样您就可以拥有返回正确数量的 div

关于mysql - group_concat concat sum 如果日期相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23049817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com