3

我有旧表,数据存储为

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 语句来完成?

4

1 回答 1

2

不,你最好用 PHP 代码来做。尽管 MySQL 确实有一种方法可以通过 定位值FIND_IN_SET(),但它没有一种等效的方法explode()可以轻松地将它们分开。可以在 MySQL 过程中编写很多丑陋的循环和字符串操作,但在 PHP 代码中更容易做到。

在MySQL 字符串函数文档下方的注释中有一些处理字符串拆分的建议,但它们并没有真正解决循环插入以规范化列。仅使用 PHP 之类的脚本语言处理确实更容易。

但是,您将其整理出来并正确规范化列是很好的。

于 2012-04-29T13:20:53.967 回答