簡體   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