mysql - 如何循环遍历字段中的逗号分隔值以在 MySQL 的其他表中创建新行

标签 mysql

我有两个在 MySQL 中工作的表,一个有一些数据,另一个将填充这些数据,但是 - 表中有一个字段具有逗号分隔值,我需要使用它来创建单独的值(类似的)记录。

例如: 数据表:“学生” Screenshot of table data is coming from

enter image description here

数据将进入名为 "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/

相关文章:

mysql - 通过和枢轴加入一个组

php - 将输入的数据从 html 表单添加到 mysql 数据库,简单

php - 不同类型的用户重定向到具有不同内容的同一页面(index.php)

PHP 在一个字段中发布两个值,其中一个是隐藏的

mysql - 无法处理带有特殊字符的代码

javascript - 使用 php/javascript 制作 3 个从 MySQL 数据库填充的相关下拉菜单

php - 使用 PDO 插入多行

php - 使用 PHP 从 Mysql 生成 JSON

mysql - 添加通配符IP如192.168.1.%时远程Mysql数据库访问错误

php - 使用 mySql 查询的结果填充数组