有这样一张表: 表名: a
有三个字段 id(主键,自增) , user 用户名, kc 课程
id user kc
1 zhangsan yuwen
2 lisi kexue
3 zhangsan shuxue
4 jj yingyu
5 jj diannao
6 ee meishu
.........
要求: 把user所选的多门kc用“,”连接起来,在一条记录里显示user的所有逗号连接的kc,且user无重复显示。
显示结果:
id user kcs
1 zhangsan yuwen,shuxue
2 lisi kexue
4 jj yingyu,diannao
6 ee meishu
解题要点:user无重复显示就是以user分组就可以了。 关于字符串连接需用CONCAT函数,
CONCAT 连接遇到空值时 结果会是NULL,要解决这样的问题就得用CONCAT(A,ifnull(b,'')),这样就能得到A字段
(这里的A b 字段与本程序无关,只是举个例子)。
另外 CONCAT(aa.kc,ifnull(CONCAT(',',bb.kc),'')) 居然也能用,这样就避免了CONCAT(aa.kc,ifnull(bb.kc,'')) 显示的时候多个逗号的问题了。
用这样的sql语句可实现:select aa.id,aa.user,CONCAT(aa.kc,ifnull(CONCAT(',',bb.kc),'')) as kcs from a as aa left join a as bb on aa.id<>bb.id and aa.user=bb.user group by aa.user order by aa.id asc