其实就是用FIND_IN_SET函数和group_concat函数,示例如下:
有两张表,
一张为爱好表b表
一张为用户表 u表
u表
id 名称 爱好Id
1 张三 1,2,3,4
2 李四 2,5
b表
id 名称
1 打乒乓
2 打羽毛球
3 打蓝球
4 上网玩游戏
5 打牌
正常查询u表
select * from u
现在需求是:
id 名称 爱好
1 张三 打乒乓,打羽毛球,打篮球,上网
2 李四 打羽毛球,打牌
修改sql为
select u.id,u.名称,group_count(b.名称) from u left join b on find_in_set(b.id,u.爱好Id) group by u.id;
group_concat 长度限制,排序和设置分隔符
select aid,group_concat(bid order by bid separator ',') as bid_str from tbl group by aid;
SET GLOBAL group_concat_max_len = 1024;
show variables like "group_concat_max_len";
SELECT * from table1 left join (
select group_concat(t3.user_name) as user_name,t2.id from table2 t2 left join table3 t3 on t2.user_id = t3.user_id
group by plan_id
) t on table1.id = t.id
where t.user_name like CONCAT("%",#{xxx},"%")