mysql逗號分隔字串成多行資料
阿新 • • 發佈:2018-12-26
最近迷上將夜,就用主角做栗子了。
轉換後:
SQL程式碼
select substring_index(substring_index(a.userIds,',',b.help_topic_id+1),',',-1) id, substring_index(substring_index(a.userNames,',',b.help_topic_id+1),',',-1) username from jiangye_actor a join mysql.help_topic b on b.help_topic_id < (length(a.userNames) - length(replace(a.userNames,',',''))+1)
substring_index函式的用法可以參考這篇部落格 https://www.cnblogs.com/mqxs/p/7380933.html
來來來,解釋一波
1.
on條件後面(length(a.userNames) - length(replace(a.userNames,’,’,’’))+1)這個語法,是得到被逗號分隔的欄位一共有幾個,
為什麼後面還有一個加1?
3+1=4;可以這樣理解,一根繩子剪三刀可以分成四段,同理一個主演名字串,三個逗號可以分隔出四個主演的名字。
既然是將一個欄位按照逗號分隔轉成多行,那麼現在已經確定了行數。
2.
substring_index(substring_index(a.userNames,’,’,b.help_topic_id+1),’,’,-1)的理解如下圖:
提示:
mysql.help_topic這張表我們只用到了它的help_topic_id,可以看到這個help_topic_id是從0開始一直連續的,join這張表只是為了確定資料行數。現在假設我的mysql.help_topic一共只有5條資料,那麼最多可轉成5行資料,若果現在主演的名字有6個就不能用mysql.help_topic這張表了。
由此看出我們完全可以找其他表來替代mysql.help_topic,只要滿足表的id是連續的,且資料條數超過了你要轉換的行數即可。