Ajuda em Script para Conversão/Migração de Tabelas

Alguém teria um exemplo de script em que possar migrar uma tabela no qual foi feito sem nenhuma normalização para especificadamente a segunda forma (2FN).

Hoje os dados encontram-se ± assim
EX: TABELA - LANCAMENTOS
ID | TITULAR | LANC1 | DESC1 | VAL1 | LANC2 | DESC2 | VAL2 | LANC3 | DESC3 | VAL3 …

PS: Já foi criado a segunda tabela contendo o ID_LANCAMENTO com FK e campos LANC,DESC,VAL…

O MS Access faz isso pra vc.
[]s

Desculpe esqueci de mencionar que o banco é MySql.

Importa pro Access, normaliza e depois exporta pro MySQL.
[]s

Ou então use o MySQL Workbench pra importar as tabelas e fazer a normalização.

O bom do access é que ele tem um assistente que analisa os dados e sugere as mudanças.
No final ele gera as tabelas já com os dados.
[]s

O que eu não estou conseguindo é fazer a migração dos dados anteriores.

EX: LANC1 | DESC1 | VAL1 | LANC2 | DESC2 | VAL2 | LANC3 | DESC3 | VAL3 … >

PARA : LANC | DESC | VAL da nova tabela.

PS: vou ver as opções do Workbench pois no mesmo ainda não tentei.

Pra exemplificar melhor, vai um esboço do meu script.

[code]$p = 1;

while ($p <= 11) {
//for ($i = 1; $i <= 11; $i++) {
$query = “SELECT Id, cod_lanc$p,descr_lanc$p,ref_lanc$p,prov_lanc$p,desco_lanc$p FROM producao WHERE cpf = ‘01560358556’”;
sc_select(meus_dados, $query );
//sc_select(meus_dados, $query);
echo $query;
$p++;
?>

<?

}

if ({meus_dados} === false)
{
echo “Erro de acesso.”;
}
else
{
//print_r($meus_dados);
// echo {meus_dados[0][0]}; echo {meus_dados[0][1]}; echo {meus_dados[0][2]};?><?
// echo {meus_dados[1][0]}; echo {meus_dados[1][1]}; echo {meus_dados[1][2]};?><?
// echo {meus_dados[2][0]}; echo {meus_dados[2][1]}; echo {meus_dados[2][2]};?><?
//Inclusão de produção]

 while (!$meus_dados->EOF){
echo  $meus_dados->fields[0]; echo  $meus_dados->fields[1]; echo  $meus_dados->fields[2];?></br><?	
//echo  {meus_dados[1][0]}; echo  {meus_dados[1][1]}; echo  {meus_dados[1][2]};?></br><?
//echo  {meus_dados[2][0]}; echo  {meus_dados[2][1]}; echo  {meus_dados[2][2]};?></br><?

	  //sc_exec_sql("INSERT INTO producao_coop (producao_Id,cod_lanc,descr_lanc, ref_lanc, prov_lanc, desco_lanc) VALUES ('".$meus_dados->fields[0]."','".$meus_dados->fields[1]."','".$meus_dados->fields[2]."','".$meus_dados->fields[3]."','".$meus_dados->fields[4]."','".$meus_dados->fields[5]."')");
	  
      $meus_dados->MoveNext();
 }
}

[/code]

Por cargas d’aqua eu não sei, o select não esta me retornando os dados dos campos “dinamicos” pois os commando query ao meu ver estão corretos:

SELECT Id, cod_lanc1,descr_lanc1,ref_lanc1,prov_lanc1,desco_lanc1 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc2,descr_lanc2,ref_lanc2,prov_lanc2,desco_lanc2 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc3,descr_lanc3,ref_lanc3,prov_lanc3,desco_lanc3 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc4,descr_lanc4,ref_lanc4,prov_lanc4,desco_lanc4 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc5,descr_lanc5,ref_lanc5,prov_lanc5,desco_lanc5 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc6,descr_lanc6,ref_lanc6,prov_lanc6,desco_lanc6 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc7,descr_lanc7,ref_lanc7,prov_lanc7,desco_lanc7 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc8,descr_lanc8,ref_lanc8,prov_lanc8,desco_lanc8 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc9,descr_lanc9,ref_lanc9,prov_lanc9,desco_lanc9 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc10,descr_lanc10,ref_lanc10,prov_lanc10,desco_lanc10 FROM producao WHERE cpf = ‘01560358556’
SELECT Id, cod_lanc11,descr_lanc11,ref_lanc11,prov_lanc11,desco_lanc11 FROM producao WHERE cpf = ‘01560358556’

Somente Retorna o ID os outros vem NULL
66407
129849
131262
132682
134880
136761
138804
141002
143372
145861
148341
150686
168502
195583
198328
200992
203571
206230

Sinistro isto ai.
Mas me parece coisa do mysql no GNU/Linux.
Olha o mysql é case sensitive no GNU/Linux.
Quando coloca:
SELECT Id, cod_lanc4,descr_lanc4,ref_lanc4,prov_lanc4,desco_lanc4 FROM producao WHERE cpf = ‘01560358556’
Os campos estão em minúsculo ou maiúsculo no banco?
Para o mysql instalado no GNU/Linux cod_lanc4, Cod_Lanc4 e COD_LANC4 são coisas diferentes.
Se estiverem diferentes faça a correção ou desabilite no my.cnf o case sensitive.
Aqui vai o site de como fazer isto no Linux: http://rewry.blogspot.com.br/2011/10/desabilitando-o-case-sensitive-do-mysql.html
Agora se for no Windows não imagino o que possa ser.

Alex, por enquanto ainda estou em ambiente de desenvolvimento windows. Quanto a possibilidade de case, somente o ID contem maiúscula.

Uma vez que tem intimidade com o ACCESS , não tem migração que não se faça com ele.
Nos aqui so usamos ele para fazer migrações e olha que já pegamos cada abacaxi . ate historial de Compras, Vendas e cobranças de outro sistema que não tinha nada a ver com o nosso , nos fizemos tudo utilizando o access , migramos 2.5000.000 de linhas em total.
Obviamente tem que ter intimidade com ele mas uma vez que se tem isso, quero ver outra ferramenta para fazer migração igual ele…
E olha que ele nem foi feito pra isso rrsrsr…

Já tive um pequeno avanço no Script, estou agora com o pequeno problema com a ordem de gravação dos dados.

[code]$result = mysql_query(“SELECT Id, cod_lanc1, descr_lanc1, ref_lanc1, prov_lanc1, desco_lanc1, cod_lanc2, descr_lanc2, ref_lanc2, prov_lanc2, desco_lanc2, cod_lanc3, descr_lanc3, ref_lanc3, prov_lanc3, desco_lanc3, cod_lanc4, descr_lanc4, ref_lanc4, prov_lanc4, desco_lanc4, cod_lanc5, descr_lanc5, ref_lanc5, prov_lanc5, desco_lanc5, cod_lanc6, descr_lanc6, ref_lanc6, prov_lanc6, desco_lanc6, cod_lanc7, descr_lanc7, ref_lanc7, prov_lanc7, desco_lanc7, cod_lanc8, descr_lanc8, ref_lanc8, prov_lanc8, desco_lanc8, cod_lanc9, descr_lanc9, ref_lanc9, prov_lanc9, desco_lanc9, cod_lanc10, descr_lanc10, ref_lanc10, prov_lanc10, desco_lanc10, cod_lanc11, descr_lanc11, ref_lanc11, prov_lanc11, desco_lanc11, cod_lanc12, descr_lanc12, ref_lanc12, prov_lanc12, desco_lanc12, cod_lanc13, descr_lanc13, ref_lanc13, prov_lanc13, desco_lanc13, cod_lanc14, descr_lanc14, ref_lanc14, prov_lanc14, desco_lanc14, cod_lanc15, descr_lanc15, ref_lanc15, prov_lanc15, desco_lanc15 FROM producao WHERE cpf = ‘{cpf}’”);
echo $num_results = mysql_num_rows($result);
?>

<?
/*
echo “

”;
print_r($result);
echo “
”;
*/
//$row = mysql_fetch_array($result, MYSQL_ASSOC);
for ($x = 0; $x < $num_results; $x++) {
$row = mysql_fetch_assoc($result);
for ($i = 1; $i <= 11; $i++) {
	//if(!is_null($row[0]) || empty($row[0]) || isset($row[0])){
	if(!empty($row["cod_lanc$i"])){
		
	echo $id 			= $row["Id"];				
	echo $cod_lanc 		= $row["cod_lanc$i"];		
	echo $descr_lanc 	= $row["descr_lanc$i"];		
	echo $ref_lanc 		= $row["ref_lanc$i"];		
	echo $prov_lanc 	= $row["prov_lanc$i"];		
	echo $desco_lanc 	= $row["desco_lanc$i"];		
		
	echo "</br>";
	
	//sc_exec_sql("INSERT INTO producao_coop (producao_Id,cod_lanc,descr_lanc, ref_lanc, prov_lanc, desco_lanc) VALUES ('".$id."','".$cod_lanc."','".$descr_lanc."','$ref_lanc','".$prov_lanc."','".$desco_lanc."')");
		
			}
		}
}[/code]