我有旧表,数据存储为
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语句完成这项工作吗?
答案 0 :(得分:2)
不,你最好用PHP代码来做。虽然MySQL确实有办法通过FIND_IN_SET()
定位值,但它没有与explode()
相同的方法来轻松地将它们分开。在MySQL程序中编写很多丑陋的循环和字符串操作是可能的,但在PHP代码中更容易。
在MySQL string function docs下面的注释中有一些处理字符串拆分的建议,但它们并没有真正解决循环插入以规范化列。在像PHP这样的脚本语言中处理它真的更容易。
但是你要对它进行排序并正确地对列进行标准化是很好的。