我觉得这太微不足道了,但我还是坚持了这一点:
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经过组的id,我得到了22 MATT 1 NULL NULL NULL,然后下一个记录。
最后,我必须使用group_concat获取像22 | Matt | 1,2 |这样的数据。
谢谢!
发布于 2017-08-17 14:43:38
使用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.idhttps://stackoverflow.com/questions/45737319
复制相似问题