mysql - 如何创建 MySQL 语句以将数组数据拆分为新的表格式

标签 mysql sql

我有一个旧表,数据存储为

tbl_id  tbl_data
--------------------
1       1,2,3,4,5,6
2       3,4,5

现在我想将这些转换为多对多关系表。

user_id user_option
-------------------
1       1  
1       2
1       3
...

基本上我在 php 中插入数据

$old = explode(",", $data['tbl_data']);
$query = $db->query("SELECT tbl_id, tbl_data FROM old_table"); 
  while($fetch = $db->fetch($query)) {
    $db->query("INSERT INTO new_table SET .....");
  }

我可以知道,有一种方法可以用单个 MySQL 语句完成此操作吗?

最佳答案

不,您最好使用 PHP 代码来完成。虽然 MySQL 确实有一种方法可以通过 FIND_IN_SET() 定位值,但它没有与 explode() 等效的方法来轻松分离它们。可以在 MySQL 过程中编写大量丑陋的循环和字符串操作,但在 PHP 代码中要容易得多

MySQL string function docs 下方的评论中有一些处理字符串拆分的建议。但他们并没有真正解决循环插入以规范化列的问题。使用像 PHP 这样的脚本语言来处理确实更容易。

但是您将其整理出来并正确规范化该列是件好事。

关于mysql - 如何创建 MySQL 语句以将数组数据拆分为新的表格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10372417/

相关文章:

mysql - 使用 mysql 查询 x 篇文章的最后 5 条评论

具有不同值的两列中的 SQL 相同连接

SQL Server 正在尝试使用两个路径作为备份位置

mysql - 创建的 MySQL View 列长度较短

wordpress 中的 Mysql_fetch_array

php - 在mysql中存储以逗号而不是点分隔的浮点值

php - 优化 SQL 查询

c# - 计算服务区域的最有效方法 Asp.net + SQL Server

sql - DBI 准备好的语句 - 绑定(bind)十六进制通配符字符串

c# - 使用 Dapper 调用 SQL 存储过程