Mysql 如何基于逗号分隔字段的位置创建权重并取消列的嵌套

Mysql 如何基于逗号分隔字段的位置创建权重并取消列的嵌套,mysql,Mysql,我有这样一个表:第二个字段中基于路径数的权重 ID path weights | 1 YouTube,Newsletter,Social 0.3 | 2 YouTube,Newsletter 0.5 | 3 YouTube 1 < >我想为第一个和最后一个

我有这样一个表:第二个字段中基于路径数的权重

ID                  path                       weights 
| 1               YouTube,Newsletter,Social     0.3
| 2               YouTube,Newsletter            0.5
| 3               YouTube                        1 
< >我想为第一个和最后一个位置创建更多的权重,其余的平均为中间路径。我该怎么做? 我希望桌子看起来像这样:

ID                  path                       weights 
| 1                 Social                      0.4
| 1                 YouTube                     0.4
| 1                 Newsletter                  0.2
| 2                 YouTube                     0.5
| 2                 Newsletter                  0.5
| 3                 YouTube                      1 
谢谢!如果我能帮助澄清更多,请告诉我

SELECT ID,weights,
LTRIM(RTRIM(m.n.value('.[1]','varchar(8000)'))) AS Path                       
FROM
(
SELECT ID,weights,CAST('<XMLRoot><RowData>' + REPLACE(Path,',','</RowData><RowData>') + '</RowData></XMLRoot>' AS XML) AS x
FROM   YourTableName
)t
CROSS APPLY x.nodes('/XMLRoot/RowData')m(n)

您可以使用此查询…这里我使用的是Sql server…

0.4从何而来?我使用的是mysql。0.4更多的是任意指定的权重。第一和最后一个位置将得到40%,其余的中间将得到其余的。因此,如果路径看起来像YouTube、时事通讯、搜索、社交网站。应该是YouTube 0.4,时事通讯0.1,搜索0.1,社交0.4。你有没有尝试解决你的问题?首先,你有没有尝试使用子字符串索引?我只是误读了。我还没有尝试通过对索引进行细分来解决问题issue@Erica您最近删除的评论“是”。首先,我使用了group_concat'-那么,显示的数据是否不是您的起点?不,您不能在MySQL中使用这些功能中的任何一个。问题标记为MySQL标记,而不是SQL Server。这可以很容易地用STRING_SPLIT实现,而无需转换为XML。