SQl语句GROUP_CONCAT的使用

来源:互联网 发布:淘宝信用贷款影响大吗 编辑:程序博客网 时间:2024/06/16 11:43

引言

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



逻辑梳理


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

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

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

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

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


级联查询三张表


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

SELECTmos.*,m.LOGIN_NAME,mosp.PIC_URL, mosp.SUFFIX FROMmember_owner_story mosLEFT JOIN member_owner_story_pic mosp ON mos.MEMBER_OWNER_STORY_ID = mosp.MEMBER_OWNER_STORY_IDLEFT JOIN member m ON mos.MEMBER_ID = m.MEMBER_IDWHEREmos.IS_DELETE = 'N'

        效果如下:




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

Concat使用


        先看代码:

SELECTmos.*,m.LOGIN_NAME,tmp.num AS EVALUATE_NUM,CONCAT(mosp.PIC_URL, mosp.SUFFIX) PIC_URLFROMmember_owner_story mosLEFT JOIN member_owner_story_pic mosp ON mos.MEMBER_OWNER_STORY_ID = mosp.MEMBER_OWNER_STORY_IDLEFT JOIN member m ON mos.MEMBER_ID = m.MEMBER_IDLEFT JOIN (SELECTmember_owner_story_id,count(member_owner_story_id) numFROMMEMBER_OWNER_STORY_EVALUATE moseGROUP BY member_owner_story_id) tmp ON tmp.member_owner_story_id = mos.MEMBER_OWNER_STORY_IDWHEREmos.IS_DELETE = 'N'

        效果如下:




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

改!


GROUP_CONCAT的使用


        sql语句:

SELECTmos.*, m.LOGIN_NAME,mose.num AS EVALUATE_NUM,mosp.pic_url AS PIC_URL,m.headFROMmember_owner_story mosLEFT JOIN (SELECTmember_owner_story_id,GROUP_CONCAT(CONCAT(tmp.PIC_URL, tmp.SUFFIX)) pic_urlFROMmember_owner_story_pic tmpGROUP BYmember_owner_story_id) mosp ON mosp.member_owner_story_id = mos.MEMBER_OWNER_STORY_IDLEFT JOIN (SELECTCONCAT(m.MEMBER_LOGO,m.suffix) head,m.LOGIN_NAME LOGIN_NAME,m.MEMBER_ID MEMBER_IDFROMmember m)m ON mos.MEMBER_ID = m.MEMBER_IDLEFT JOIN (SELECTmember_owner_story_id,count(member_owner_story_id) numFROMMEMBER_OWNER_STORY_EVALUATE GROUP BYmember_owner_story_id) mose ON mose.member_owner_story_id = mos.MEMBER_OWNER_STORY_IDWHEREmos.IS_DELETE = 'N'

       效果:




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

URL拆开就OK了。


总结


        要学习的东西太多,强大的sql语句,语法结构还有业务流程,这些这些统统都仍然需要学习。
1 0
原创粉丝点击