2017-08-17 90 views
1

我覺得它如此微不足道,但我還是堅持了這一點:Mysql的與GROUP BY + IF +左+加入GROUP_CONCAT

SELECT u.id, u.name, 

IF(s.prod_id=0, 1,NULL) as amount, 
IF(s.prod_id=92, 2,NULL) as amount2, 
IF(s.prod_id=116, 3,NULL) as amount3, 
IF(s.prod_id=134, 4,NULL) as amount4 

FROM table_user u 

LEFT JOIN table_user_status s ON s.user_id = u.id 
where s.prod_id = 0 OR s.prod_id = 92 OR s.prod_id = 117 OR s.prod_id = 134 

-- GROUP BY u.id 
order by u.id ASC 

我得到的是這樣的:

22 | Matt | 1|NULL|NULL|NULL 

22 | Matt | NULL|2|NULL|NULL 

集團後編號我得到22 MATT 1 NULL NULL NULL,然後下一個記錄。

在結束我必須爲數據用戶GROUP_CONCAT像 22 | Matt | 1,2 |

謝謝!

+0

您在WHERE還需要在選擇116和117。我猜一個人是錯的? – AjahnCharles

回答

1

使用CASE表達對所有這些案件返回爲一列,然後只是GROUP_CONCAT它:

SELECT 
    u.id, 
    u.name, 
    GROUP_CONCAT(amount ORDER BY amount) amounts 
FROM 
(
    SELECT 
     u.id, 
     u.name, 
     CASE s.prod_id 
      WHEN 0 THEN 1 
      WHEN 92 THEN 2 
      WHEN 116 THEN 3 
      WHEN 134 THEN 4 
     END AS amount 
    FROM table_user u 
    LEFT JOIN table_user_status s 
     ON s.user_id = u.id 
    WHERE s.prod_id IN (0, 92, 116, 134) 
) u 
GROUP BY 
    u.id, 
    u.name 
ORDER BY u.id 
+0

好的。我更新後的查詢有一種氣味,將所有內容都放到一個列中肯定是這裏+1的途徑。 –

+0

哇,你是大兄弟!我很感激,非常感謝你!我很傷心,我不能給你「上」。 :( – Stanlej

+0

別擔心,我永遠不會讓你失望。 – AjahnCharles