我有两个在 MySQL 中工作的表,一个有一些数据,另一个将填充这些数据,但是 - 表中有一个字段具有逗号分隔值,我需要使用它来创建单独的值(类似的)记录。
例如:
数据表:“学生”
Screenshot of table data is coming from
数据将进入名为 "student_season_cross"
的表中,并将填充名为 "student_id"
和 "league_id"
的字段,但我希望它将新记录基于原始表中的“old_leagues”。
因此,例如:原始表中的数据如下所示:
student_id | old_leagues
38 | 9, 33
39 | 8
40 | 3, 46
将像这样填充新表:
ss_index | student_id | league_id
auto increment | 38 | 9
auto increment | 38 | 33
auto increment | 39 | 8
auto increment | 40 | 3
auto increment | 40 | 46
我原以为这会是某种循环,但我就是想不通。有什么想法吗?
最佳答案
这是 FIND_IN_SET
派上用场的少数情况之一。您可以使用此函数检索逗号分隔列表的(特定)段。使用它,我们可以将任何学生记录加入到可用联赛的记录中;从而得到如下结果:
league | student
==============
1 | 38
1 | 39
1 | 40
2 | 39
3 | 22
3 | 23
您可以在此处使用 FIND_IN_SET
确定学生对联赛的参与情况。我还假设有一个名为 leagues
的表,其中您在 leagues.id
下拥有所有联赛 ID:
INESRT INTO new_leagues (student_id, league_id)
SELECT origial_table.student_id
leagues.id
FROM leagues
INNER JOIN original_table
-- join a student record every time FIND_IN_SET matches
ON FIND_IN_SET(leagues.id, original_table.old_leagues) >= 0
你必须原谅我目前无法测试这个,因为我正在升级我的开发服务器,但希望你能从这里收集到一个有效的答案。
关于mysql - 如何循环遍历字段中的逗号分隔值以在 MySQL 的其他表中创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414499/