当前位置 博文首页 > 文章内容

    mysql单字段多值分割和合并的处理方法

    作者:shunshunshun18 栏目:未分类 时间:2021-01-17 14:43:26

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    多个值合并展示

    现在我们有如图一到图二的需求

    图一

    图二

    怎么做?

    如下sql:

    SELECT id,GROUP_CONCAT(DISTINCT str) as str from test GROUP BY id
    

    相关知识点

    GROUP_CONCAT

    GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符'])

    多个值拆分展示

    现在我们的需求和第一个例子相反

    由图三

    图三

    到图四

    图四

    这里就稍微复杂了,首先对于str提前做了如图的处理,即字符+','的一对一对应处理,其次,因为mysql没有序列功能,所以我们需要提前准备一张序列表,最大id应该大于单个字段内最大项数

    序列表

    具体sql如下:

    SELECT t.id,SUBSTRING_INDEX(SUBSTRING_INDEX(str,',',s.id),',',-1) as str 
    	from test2 t 
    		join sequence s on s.id<(LENGTH(t.str)/2+1) 
    			ORDER BY t.id
    

    相关知识点

    SUBSTRING_INDEX(str,delim,count)

    SUBSTRING_INDEX(要处理的字符串,分隔符,计数)

    如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容

    如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容

    总结