我有这个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
答案 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
个数。