Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

drinllyn

comparação entre tabelas

Recommended Posts

boa tarde, a algum tempo busco uma solução para fazer a requisição de dados do banco FIREBIRD para o MYSQL, apos muita busca e pouco resultado resolvi fazer no braço.

porem como nem tudo são sombra e água fresca, encontrei alguns problemas nos meus códigos que ainda não consegui solucionar, vou explicar um pouco melhor no exemplo.

 

Exemplo1:

fiz a conexão do FIREBIRD no PHP.

 

CONEXÃO COM FIREBIRD

// conecta no banco do firebird
$servidor = '127.0.0.1:C:banco.gdb';
if (!($dbh=ibase_connect($servidor, 'SYSDBA', 'masterkey')))
die('Erro ao conectar: ' .  ibase_errmsg());
// seleciona tudo do banco PRODUTO
$sql = 'SELECT * FROM PRODUTO';
// faz uma busca no banco
$query= ibase_query ($dbh, $sql)

CONEXÃO COM MYSQL

// conecta no banco do mysql
$conn = mysql_connect("localhost", "root", "");
$db = mysql_select_db("teste", $conn);
// seleciona tudo de um 
$tabela = "produto";

Ate então tudo simples, conectado e com resultado agora comecei a fazer o necessário.

while ($row = ibase_fetch_object  ($query)) {

    echo $row->codigo_produto;
	echo "<br/>";
    echo $row->nome_produto;
	echo "<br/>";
	echo $row->preco_produto;
	echo "<br/>";
	$dados1 = $row->codigo_produto;
	$dados2 = $row->nome_produto;
//agora vou grava as informações que eu quero
	$gravar = "INSERT INTO $tabela(codigo_produto,nome_produto) VALUES('$row->codigo_produto','$row->nome_produto')";
	mysql_query($gravar) or die(mysql_error);
}

Perfeito, fez oq eu queria peguei dados do FIREBIRD e coloquei no MYSQL.

 

agora a segunda etapa do código que manipular esses dados.

falta eu lança preço e estoque que ficam em tabelas diferente.

// conecta no banco do mysql
$conn = mysql_connect("localhost", "root", "");
$db = mysql_select_db("teste", $conn);


// variavel com nome das tabelas
$tabela = "preco_produto";
$tabela2 = "produto";

//faço as consultas das tabelas que quero manipular
$consulta=mysql_query("SELECT * FROM $tabela"); 
$consulta2=mysql_query("SELECT * FROM $tabela2"); 


//faz o laço para cadastro dos produtos
// fazer ele buscar oq ja tem no preço caso tenho fazer update do contrario vai colocar.
while ($row = mysql_fetch_object  ($consulta2)) {

if ($row->codigo_produto == $gravar['VALUES']) // agora aqui acontece o meu erro, não consigo puxar o valor do banco para //fazer uma comparação
{
	echo $row->codigo_produto,'---';
	echo 'certo','-----', $row->nome_produto;
	echo '<BR>' ;
	}
	
else {
	echo $row->codigo_produto,'---';
	echo 'errado','-----', $row->nome_produto;
	echo '<BR>' ;
	}
	
}


o Erro se encontra no IF onde eu peguntaria, (se o valor de ID do produto for = ao código de preço), me mostra resultado correto.

do contrario, caso ele não exista ele vai criar ou modificar caso o valor esteja errado.

 

espero ter explicado corretamente meu problema.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe por alterei no post para facilitar o intendimento de todos. fiz a correção do post.

 

O nome da coluna, é codigo_produto ou product_id?
Você está gravando codigo_produto e lendo product_id.

 

o product_id e codigo_produto

 

pois na tabela de preço consulto pelo valor da ID do produto, pois o mesmo pode ter vários preços por moedas diferentes,

 

Exemplo

tabela produto

ID nome_produto

1 notebook teste

 

tabela produto_preco

 

ID codigo_produto valor moeda

1 1 10 R$

1 1 5 U$

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

O que vem na variável $gravar['VALUES']?

 

essa variável foi mais um teste sem sucesso.

Eu queria que o if fosse.

IF(produto_codigo == id(da tabela produto)){
Mostra Certo
}
else{
vamos colocar ou modificar dependendo do caso.
}

pra ser mais correto oq estou tentando fazer e uma variável que faça uma while no codigo_produto. e se tiver um == a $row->id ele não vai fazer nada. pois o mesmo já se encontra cadastrado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php

// conecta no banco do mysql
$conn = mysql_connect("localhost", "root", "");
$db = mysql_select_db("teste", $conn);

// variavel com nome das tabelas
$tabela = "preco_produto";
$tabela2 = "produto";

//faço as consultas das tabelas que quero manipular
$consulta = mysql_query("SELECT * FROM $tabela"); 
$consulta2 = mysql_query("SELECT * FROM $tabela2"); 

while($registro2 = mysql_fetch_object($consulta2))
{
	while($registro1 = mysql_fetch_object($consulta))
	{
		if ($registro1->codigo_produto == $registro2->id) 
		{
			// mesmo produto
		}
		else
		{
			// produto diferente
		}
	}
}

?>

Você terá de fazer um loop para cada select e colocar um dentro do outro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi um avanço agradeço. só que ainda persiste alguns erros.

ele busca o valor na tabela de preço compara ver que e diferente mas não altera. vou mostrar o resultado abaixo

 

2003---6---errado-----NOME DO PRODUTO
2003---5---errado-----NOME DO PRODUTO

 

ele comparou as duas ID que encontrou em preço a 6 e 5.

a ID 2003 e do primeiro produto no banco.

 

ele viu que tava errado mas não continuo o loop ate achar todos os registro e comparar todos os registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho.

 

O código acima percorrerá toda a tabela2 (produto), e com cada produto, vai comparar com todos os preços da tabela1.

 

Você pode postar uma amostra do conteúdo das duas tabelas no banco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui uma avanço,

 

2003---6---errado-----NOME DO PRODUTO
2---6---errado-----NOME DO PRODUTO
3---6---errado-----NOME DO PRODUTO
4---6---errado-----NOME DO PRODUTO
5---5---certo-----NOME DO PRODUTO
5---6---errado-----NOME DO PRODUTO
6---6---certo-----NOME DO PRODUTO
7---6---errado-----NOME DO PRODUTO

 

vou postar novamente o código.

while($registro2 = mysql_fetch_object($preco))
{
	
	while($registro1 = mysql_fetch_object($produto))
	{
		$produtoteste = $registro1->product_id;
		$precoteste = $registro2->price_product_id;
		
		$preco2=mysql_query("SELECT price_product_id FROM $tabela WHERE price_product_id = $registro1->product_id ");
		while($registro3 = mysql_fetch_object($preco2)){
			$precoteste2 = $registro3->price_product_id;
			if ($produtoteste == $precoteste2) 
		{
	echo $produtoteste,'---',$precoteste2;
	echo 'certo','-----', $registro1->product_name;
	echo '<BR>' ;
		}
		else
		{
	echo $produtoteste,'---',$precoteste;
	echo 'errado','-----', $registro1->product_name;
	echo '<BR>' ;
		}
			}
 if ($produtoteste == $precoteste) 
		{
		}
		else{
	echo $produtoteste,'---',$precoteste;
	echo 'errado','-----', $registro1->product_name;
	echo '<BR>' ;
			
			}
	}
}

	

Compartilhar este post


Link para o post
Compartilhar em outros sites

deu Certo agradeço toda a ajuda.

agora e desenvolver os códigos dentro das if

<?php
// conecta no banco do firebird
$servidor = '127.0.0.1:C:banco.gdb';
if (!($dbh=ibase_connect($servidor, 'SYSDBA', 'masterkey')))
		die('Erro ao conectar: ' .  ibase_errmsg());
// seleciona tudo do banco PRODUTO
$sql = 'SELECT * FROM PRODUTO';
$query= ibase_query ($dbh, $sql);
// conecta no banco do mysql
$conn = mysql_connect("localhost", "root", "");
$db = mysql_select_db("utimo", $conn);
// seleciona tudo de um 
$tabela = "s7b2o_hikashop_price";
$tabela2 = "s7b2o_hikashop_product";

$preco=mysql_query("SELECT * FROM $tabela"); 
$produto=mysql_query("SELECT * FROM $tabela2"); 

//faz o laço para cadastro dos produtos
// fazer ele buscar oq ja tem no preço caso tenho fazer update do contrario vai colocar.

//faz um loop nos preços.
while($registro2 = mysql_fetch_object($preco))
{
//faz um loop nos produtos
	while($registro1 = mysql_fetch_object($produto))
	{

		$produtoteste = $registro1->product_id;
		$precoteste = $registro2->price_product_id;
//faz uma nova busca com o ID do produto
		$preco2=mysql_query("SELECT * FROM $tabela WHERE price_product_id = $registro1->product_id ");

//faz um loop com a busca no loop
		while($registro3 = mysql_fetch_object($preco2))
		
		{
			$precoteste2 = $registro3->price_product_id;
//começa o if
			if ($produtoteste == $precoteste2) 
		{		
	echo $produtoteste,'---',$precoteste2;
	echo 'certo','-----', $registro1->product_name;
	echo '<BR>' ;
		}
//termina o if

//começa o else
		else
		{
	echo $produtoteste,'---',$precoteste2;
	echo 'errado','-----', $registro1->product_name;
	echo '<BR>' ;
		}
//termina o else
			}
			$precoteste3 = $precoteste2;
// um segundo if pq o primeiro so mostrou os TRUE
 if ($produtoteste == $precoteste3) 
		{
		}
// Fim do IF
// inicio do segundo else pois o primeiro nao mostra os produtos que são diferentes
		else
		{
	echo $produtoteste,'---',$precoteste3;
	echo 'errado','-----', $registro1->product_name;
	echo '<BR>' ;
			}
//fim do else

	}
	
}


	
?> 

a ajuda. vou posta o código final para terem uma ideia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.