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 に答える