我有一个旧表,数据存储为
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/