SQl语句GROUP_CONCAT的使用

引言

      
        最近涉及到三张表联查,中间还涉及到对数据的处理,看张图,足以说明逻辑之复杂。



逻辑梳理


        简单的介绍一下,我需要的查询结果:        

        从车主信息表里获取车主的登录信息,OK,之后的事情与车主信息表无关了。

        然后,我需要从车主故事表里,获取车主故事的ID,根据这个ID去查询车主故事图片信息表里的图片,但是一个

车主故事可能对应多个相关图片,所以需要将获取的n张图片,放在一个字段里,查询出来,也就是 

“pic1,pic2,pic3……picn” 这样的形式。下边看看在该需求下,sql的进化过程:


级联查询三张表


        级联查询三张表,并不难,sql语句如下:

SELECT
	mos.*,
	m.LOGIN_NAME,		
	mosp.PIC_URL, 
	mosp.SUFFIX 
FROM
	member_owner_story mos
LEFT JOIN member_owner_story_pic mosp ON mos.MEMBER_OWNER_STORY_ID = mosp.MEMBER_OWNER_STORY_ID
LEFT JOIN member m ON mos.MEMBER_ID = m.MEMBER_ID		
WHERE
	mos.IS_DELETE = 'N'

        效果如下:




        但是这并没有得到我想要查询的结果,只是将图片路径和后缀名查出来了而已,于是有了下一个sql语句:

Concat使用


        先看代码:

SELECT
	mos.*,
	m.LOGIN_NAME,
	tmp.num AS EVALUATE_NUM,
	CONCAT(mosp.PIC_URL, mosp.SUFFIX) PIC_URL
FROM
	member_owner_story mos
LEFT JOIN member_owner_story_pic mosp ON mos.MEMBER_OWNER_STORY_ID = mosp.MEMBER_OWNER_STORY_ID
LEFT JOIN member m ON mos.MEMBER_ID = m.MEMBER_ID
LEFT JOIN (
	SELECT
		member_owner_story_id,
		count(member_owner_story_id) num
	FROM
		MEMBER_OWNER_STORY_EVALUATE mose
	GROUP BY member_owner_story_id
) tmp ON tmp.member_owner_story_id = mos.MEMBER_OWNER_STORY_ID
WHERE
	mos.IS_DELETE = 'N'

        效果如下:




        可以看到图片路径和后缀名组合到一起了,但是,我的需求是相同的ID的图片信息组合到一个字段里,所以还得

改!


GROUP_CONCAT的使用


        sql语句:

SELECT
			mos.*, m.LOGIN_NAME,
			mose.num AS EVALUATE_NUM,
			mosp.pic_url AS PIC_URL,
			m.head
		FROM
			member_owner_story mos
		LEFT JOIN (
			SELECT
				member_owner_story_id,
				GROUP_CONCAT(
					CONCAT(tmp.PIC_URL, tmp.SUFFIX)
				) pic_url
			FROM
				member_owner_story_pic tmp
			GROUP BY
				member_owner_story_id
		) mosp ON mosp.member_owner_story_id = mos.MEMBER_OWNER_STORY_ID
		LEFT JOIN (
			SELECT					
				CONCAT(m.MEMBER_LOGO,m.suffix) head,
				m.LOGIN_NAME LOGIN_NAME,
				m.MEMBER_ID MEMBER_ID
			FROM
				member m
		)m ON mos.MEMBER_ID = m.MEMBER_ID
		LEFT JOIN (
			SELECT
				member_owner_story_id,
				count(member_owner_story_id) num
			FROM
				MEMBER_OWNER_STORY_EVALUATE 
			GROUP BY
				member_owner_story_id
		) mose ON mose.member_owner_story_id = mos.MEMBER_OWNER_STORY_ID
		WHERE
			mos.IS_DELETE = 'N'

       效果:




        可以看到我想要的效果出来了,所有的URL地址通过“,”组合到一起了,那么前台在处理的时候,直接通过split

URL拆开就OK了。


总结


        要学习的东西太多,强大的sql语句,语法结构还有业务流程,这些这些统统都仍然需要学习。
评论 70
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值