日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql分隔字符串转变为多行_【mysql】将以固定分隔符分隔的字符串转成多行的形式...

發(fā)布時(shí)間:2024/10/8 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql分隔字符串转变为多行_【mysql】将以固定分隔符分隔的字符串转成多行的形式... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景

近期在做用戶(hù)標(biāo)簽項(xiàng)目,目前標(biāo)簽的存儲(chǔ)是用戶(hù)id,標(biāo)簽ids(每個(gè)標(biāo)簽以,形式存儲(chǔ)) 的形式,但是如果想統(tǒng)計(jì)前后兩天標(biāo)簽的變化,使用find_in_set函數(shù),一方面查詢(xún)速度慢(因?yàn)椴荒苁褂盟饕?,另一方面目前標(biāo)簽已有將近300多個(gè),以后還會(huì)更多,一個(gè)標(biāo)簽一個(gè)標(biāo)簽的寫(xiě),使得sql特別長(zhǎng)。

目前采取的策略是:將用戶(hù)標(biāo)簽表拆分成 用戶(hù)id,標(biāo)簽id的形式。這樣將前后兩天的表關(guān)聯(lián),就能查出昨天到今天有那些標(biāo)簽離開(kāi),哪些標(biāo)簽進(jìn)來(lái)。

那么采用上述策略就需要研究怎么將用戶(hù)id,標(biāo)簽ids的形式轉(zhuǎn)換成用戶(hù)id,標(biāo)簽id的形式。

探索

我們知道像 1,2,3,4,5,212 這種字符串,如果要分別取到1 2 3 4 5 212,用編程的思想就是先將該字符串用","分隔成一個(gè)數(shù)據(jù),然后遍歷取到數(shù)組里的每一個(gè)值,但是在mysql里并沒(méi)有數(shù)組的概念,但是我們可以用各種方法求得字符串的長(zhǎng)度,以及求得使用“,”分隔后有多少個(gè)值。也可以用mysql可以采取的字符串截取的形式去獲得相應(yīng)位置的數(shù)值。下面就讓我們看一下吧~

實(shí)現(xiàn)

相關(guān)表結(jié)構(gòu)

CREATE TABLE `tagids_label` (

`userid` int(11) NOT NULL COMMENT '用戶(hù)id',

`label` int(11) NOT NULL COMMENT '標(biāo)記,暫時(shí) 保留三天的數(shù)據(jù),day%3 ',

`day` int(11) NOT NULL COMMENT '對(duì)應(yīng)的統(tǒng)計(jì)日期的天',

`tagids` text NOT NULL COMMENT '標(biāo)簽id,以,(英文)分隔',

`createTime` datetime NOT NULL COMMENT '創(chuàng)建時(shí)間',

`updateTime` datetime NOT NULL COMMENT '更新時(shí)間',

PRIMARY KEY (`userid`,`label`),

KEY `index_day` (`day`),

KEY `index_label` (`label`),

KEY `index_label_userid` (`userid`,`label`),

KEY `index_createTime_userid` (`userid`,`createTime`),

KEY `index_userid` (`userid`),

KEY `index_createtime` (`createTime`) USING BTREE,

FULLTEXT KEY `index_tagids` (`tagids`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶(hù)標(biāo)簽結(jié)果表'

CREATE TABLE `sequence` (

`seq` int(3) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

ps:sequence表表示標(biāo)簽的個(gè)數(shù),從1到最大個(gè)數(shù)

獲得固定分隔符分隔后元素個(gè)數(shù)

原數(shù)據(jù)

SELECT * FROM `tagids_label` WHERE `userid` =2

blockchain

171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227

分隔符分隔后元素個(gè)數(shù)

SELECT length(`tagids`) ,length(REPLACE (`tagids`,',','')),length(`tagids`)-length(REPLACE (`tagids`,',',''))+1 FROM `tagids_label` WHERE `userid` =2

image.png

注:length(tagids)計(jì)算字符串長(zhǎng)度,以字節(jié)為單位,每個(gè)數(shù)字、英文標(biāo)點(diǎn)符號(hào)是一個(gè)字節(jié),每個(gè)中文、中文標(biāo)點(diǎn)符號(hào)是3個(gè)字節(jié)。length(tagids)表示tagids含有多少個(gè)數(shù)字和標(biāo)點(diǎn)符號(hào)

replace(tagids,',','')將字符串tagids里的","用空字符來(lái)代替,length(replace(tagids,',',''))就表示tagids含有多少個(gè)數(shù)字。

length(tagids)-length(replace(tagids,',','')) 表示tagsid含有多少個(gè)標(biāo)點(diǎn)符號(hào),那標(biāo)點(diǎn)符號(hào)+1就表示tagids用","分隔符分隔后含有多少個(gè)元素,即標(biāo)簽個(gè)數(shù)。

substring_index 截取字符串

根據(jù)關(guān)鍵字","截取字符串

SELECT substring_index('171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227', ',',1)

UNION ALL

SELECT substring_index('171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227', ',',2)

UNION ALL

SELECT substring_index('171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227', ',',3)

UNION ALL

SELECT substring_index('171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227', ',',4)

UNION ALL

......

UNION ALL

SELECT substring_index('171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227',',',61)

結(jié)果:

171

171,172

171,172,173

171,172,173,174

......

171,172,173,174,175,184,187,189,191,192,49,52,55,90,96,101,104,110,7,9,253,270,277,280,129,131,134,136,138,139,231,241,58,63,66,70,72,75,77,79,84,149,150,159,163,165,166,193,195,256,225,236,246,248,197,200,207,221,210,278,227

注:substring_index(str,delim,count) 說(shuō)明:substring_index(被截取字段,關(guān)鍵字,關(guān)鍵字出現(xiàn)的次數(shù)),如果count=-1我們就可以截取到倒數(shù)第一個(gè)被關(guān)鍵字分隔的元素。只要在上面查詢(xún)結(jié)果中再使用一次substring_index即可獲得每個(gè)被關(guān)鍵字分隔的元素。

最終實(shí)現(xiàn)

SELECT

userid,

SUBSTRING_INDEX(

SUBSTRING_INDEX(tagids, ',', seq),

',' ,- 1

) sub_id,

seq

FROM sequence

JOIN (SELECT * FROM `tagids_label` WHERE userid = 2)b

WHERE

seq BETWEEN 1

AND (

SELECT

1 + LENGTH(tagids) - LENGTH(replace(tagids, ',', ''))

)

ORDER BY

userid,

tagids;

結(jié)果:

image.png

image.png

總結(jié)

以上是生活随笔為你收集整理的mysql分隔字符串转变为多行_【mysql】将以固定分隔符分隔的字符串转成多行的形式...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美丰满一区二区免费视频 | 激情欧美一区二区免费视频 | 久久天天东北熟女毛茸茸 | 国产一区二区三区影视 | 五月天精品在线 | 男人天堂导航 | 一对一色视频聊天a | 久久视频中文字幕 | 亚洲精品乱码久久久久久蜜桃91 | 福利片第一页 | 亚洲a级精品 | 亚洲女同视频 | 91好色先生tv | 日本中文字幕网站 | 香蕉视频在线网址 | aaa级黄色片 | 熟睡侵犯の奶水授乳在线 | 久久精选视频 | 久久成人福利 | 精品无码国产污污污免费网站 | 国产午夜无码精品免费看奶水 | 久艹在线| 影音先锋亚洲一区 | 国产五月 | 四虎永久在线精品 | 99热在线只有精品 | 日本天天操 | 伊人国产精品 | 九色丨蝌蚪丨成人 | 打屁股无遮挡网站 | 97超碰人人| 久久人| 国产一区999| 超碰av在线播放 | 亚洲激情在线 | 久久免费在线观看视频 | 日韩视频免费 | www成人网| 国产伦精品一区二区三区视频痴汉 | 无码免费一区二区三区 | 熟女视频一区 | 相亲对象是问题学生在线观看 | 69视频国产 | 成人区人妻精品一区二区网站 | 超碰人人人人人 | 国产精品无码AV无码国产 | 岛国av中文字幕 | 日韩欧美国产成人 | 黄色短视频在线观看 | 午夜在线精品偷拍 | 秋霞一级全黄大片 | 国产毛片不卡 | 精品美女| 亚洲无码一区二区三区 | 韩国av一区二区三区 | 操操操日日日 | 日韩精品亚洲精品 | 色小说香蕉 | 亚洲欧洲精品一区二区 | 国产精品一品二品 | 涩涩视频在线 | 精品免费视频 | 毛片视频大全 | 人妻少妇精品无码专区久久 | 欧美成人综合 | 嫩草亚洲 | 双性人hdsexvideos | 国产尤物av | 黄色一级大片免费看 | 在线天堂www在线国语对白 | 情五月| 国内精品久久99人妻无码 | 久久与婷婷 | 中文字幕+乱码+中文字幕明步 | 日韩成人小视频 | 美女喷液视频 | 欧美成人一区二区视频 | 亚洲国产一区二区在线观看 | 亚洲综合图 | 久久久久网 | 欧美天堂网站 | 日本欧美亚洲 | 久久精品国产亚洲av嫖农村妇女 | 黄a视频| 白白色免费视频 | 中文字幕在线视频一区 | 自拍av在线| 另类激情视频 | 国产精品免费精品一区 | 在线一区二区不卡 | 二区免费视频 | 九色论坛| 9l视频自拍九色9l视频成人 | av每日更新在线观看 | 在线看毛片网站 | 亚洲tv在线观看 | 欧美日韩视频无码一区二区三 | 又色又爽又高潮免费视频国产 | 久久特黄|