Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia amigos,
me deparei com um problema simples e gostaria da ajuda de vocês. Estou fazendo a migração de dados de um banco local para um banco hospedado (linguagem Mysql).
Fiz o print de todos os campos do banco local e do banco web. No banco WEB tenho uma tabela chamada mld_course a qual retorna o ID e o FULLNAME, na tabela LOCAL tenho uma tabela chamada tbl_perguntas_categorias a qual retorna também o ID e o NOME. Preciso compararo resultado das 2 querys, se o nome da tabela tbl_perguntas_categorias for igual (se ela existir) na tabela mdl_course eu printo os dados. Já para adiantas na tabela mdl_course só tem 1 nome que deve retornar (alimentação oral e dietética). Segue abaixo o código que estou utilizando:
<?php
// Conexão com o Banco de Dados LOCAL
$servidor = "localhost:3306";//Geralmente é localhost mesmo
$nome_usuario = "root";//Nome do usuário do mysql
$senha_usuario = "root"; //Senha do usuário do mysql
$nome_do_banco = "nutritotalantigo"; //Nome do banco de dados
$conecta1 = mysql_connect("$servidor", "$nome_usuario", "$senha_usuario", TRUE) or die (mysql_error());
$banco1 = mysql_select_db("$nome_do_banco",$conecta1) or die (mysql_error());
$servidor = "";//Geralmente é localhost mesmo
$nome_usuario = "";//Nome do usuário do mysql
$senha_usuario = ""; //Senha do usuário do mysql
$nome_do_banco = ""; //Nome do banco de dados
$conecta2 = mysql_connect("$servidor", "$nome_usuario", "$senha_usuario", TRUE) or die (mysql_error());
$banco2 = mysql_select_db("$nome_do_banco",$conecta2) or die (mysql_error());
// Printando os dados do banco WEB:
echo '<p>DADOS DO BANCO WEB: </p>';
$query2 = "SELECT mdl_course.id, mdl_course.fullname FROM mdl_course WHERE mdl_course.fullname LIKE '%%'";
$sql2 = mysql_query($query2,$conecta2);
while($monta2 = mysql_fetch_assoc($sql2)){
echo 'ID: '.$monta2['id'].' - ';
echo 'FULLNAME: '.$monta2['fullname'].'<br>';
}
echo '<hr>';
// Printando os dados do banco local:
echo '<p>DADOS DO BANCO LOCAL: </p>';
$query1 = 'SELECT tbl_perguntas_categorias.nome, tbl_perguntas.id FROM tbl_perguntas_categorias,tbl_perguntas WHERE tbl_perguntas_categorias.id=tbl_perguntas.categoria ORDER BY tbl_perguntas.created DESC;';
$sql1 = mysql_query($query1,$conecta1)OR DIE(mysql_error());
while($monta1 = mysql_fetch_assoc($sql1)){
//if(){ acredito que aqui viria o IF por isso está comentado
echo 'ID: '.$monta1['id'].' - ';
echo 'NOME: '.$monta1['nome'].'<br>';
//}
}
?>amigo os bancos estão separados, um é local e o outro web com isso não consigo comparar antes.
O que eu quero entender é qual é a necessidade da comparação. Entendo a necessidade, talvez o mais indicado seriam soluções que o próprio MySQL provê, ao invés de fazer uma curva com o PHP.
A ideia é pegar da tbl_perguntas_categorias.nome todas as perguntas com a categoria que é existente na tabela mdl_course.fullname e retornar os dados.
Na tabela mdl_course já sei que a unica categoria que existe igual a da tabela tbl_perguntas_categorias é Alimentação oral e dietética, com isso, quero passar todas as perguntas com categoria Alimentação oral e dietética para a tabela mdl_course.
Eu sugeriria fazer INSERT from SELECT, que você utiliza uma consulta (SELECT) para inserir (INSERT) os dados.
Se os dois bancos de dados estiverem no mesmo servidor, você pode utilizar apenas o nome da base de dados para realizar a consulta.
SELECT
*
FROM
database1.table table_db1
INNER JOIN database2.table table_db2 (table_db1.nome = table_d2.fullname)
Caso forem em servidores diferentes, utilize FEDERATED Storage Engine. Dessa forma as duas tabelas estarão na mesma base, apenas faça o JOIN e depois o INSERT from SELECT.
Utilizando apenas o MySQL, você conseguirá um resultado mais rápido e confiável, além de poder utilizar transactions para garantir a integridade.
Estou tentando entender o intuito desse seu código. Você quer fazer uma migração de dados. Mas qual é o motivo de compará-los pelo PHP.
Lhe questiono isso, pois, dependendo da resposta, pode haver uma forma mais eficiente.