-
-
Tópicos Recentes
- JAVASCRIPT Introdução – Aula 01
- O que é o Google Sidewiki
- Melhores sites para Upload/Download arquivos
- Como Fazer Download ShareFlare
- COMO CRIAR CARICATURA ONLINE 3 SITES
- Constantes no PHP, Constantes em Classes – Dissecando PHP
- Dividir Arquivos em várias partes – Dissecando PHP
- RPG – Introdução
- Excluir registros no banco Mysql – Delete from Sintaxe
- Inserir dados no banco Mysql – Insert into Sintaxe
- Como renomear um banco no Mysql – rename database
- Comprar AzBox AzAmerica (Receptor e Antena)
- Como abrir arquivos docx e pptx sem ter o word ou powerpoint
- Erro 500 – Internal Server Error
- Como rastrear uma entrega pelos correios
Sites Parceiros
Translator

Receba Novidades no Email:
-
RSS Links
Links do Site
Categorias
Arquivos
Ser Nosso Amigo?
Favoritos?
-
Comentários Recentes
- Fabrício on MSN não loga – erro 80048051
- adriano dória on MSN não loga – erro 80048051
- jeriton on Como atualizar o MSN para o Windows Live Messenger 2009
- Marlon on O que é o receptor de TV AZBOX? É ilegal?
- Leticia on MSN não loga – erro 80048051
















Update com duas tabelas com Inner join
Categoria(s): Mysql
Publicado Sunday, 7 de February de 2010 - 23:37:33
As vezes precisamos fazer um update que envolve várias tabelas, ou porque você quer executar essa query diretamente de um aplicativo que entende somente a sintaxe sql ou porque você quer ganhar velocidade na execução do update, etc etc.
As razões podem ser várias, mas antes de vermos como fazer um update envolvendo mais de uma tabela vamos criar uma situação onde precisaremos desse update e também veremos como fazer o serviço via php. Isso tudo pra facilitar o entendimento de quem está iniciando com mysql.
Problema:
Você recebe um banco de dados de um cliente contendo duas tabelas (autor, artigo):
A tabela autor tem os seguintes campos:
- ID
- user_nicename
- display_name
A tabela artigo tem os seguintes campos:
- ID
- post_autor
- post_title
- post_content
Acontece que, invés do usuário cliente ter utilizado o ID da tabela autor como referência na tabela artigo no campo post_autor, ele utilizou alí o user_nicename. Como se trata de um campo não inteiro, essa consulta pode levar muito mais tempo que levaria. Lhe vem a idéia de arrumar isso – eis que nossa situação está criada -, então vejamos o passo a passo para tal:
1- Primeiro você precisará criar outro campo inteiro na tabela artigo, coloque um nome sugestivo como autor_id
2- Crie um arquivo php para fazer o trabalho para você, veja como ficaria o script:
$conn = mysql_connect("localhost", "root", "") or die("erro na conexão"); mysql_select_db("banco",$conn); $result = mysql_query("select ID, user_nicename from autor",$conn); while($row = mysql_fetch_array($result)){ update_artigo($row["ID"],$row["user_nicename"]); } function update_artigo($id_author, $nm_author){ global $conn; $result = mysql_query("update artigo set autor_id = $id_author where post_autor='".$nm_author."'", $conn); }No exemplo acima foi feito basicamente o seguinte, você se conectou ao servidor, selecionou o banco de dados, executou uma consulta que retornou todos os ID e user_nicename de todos os autores, fez um while nos autores e executou a função update_artigo passando sempre dois parâmetros, o ID e o user_nicename; A função update_artigo atualiza o campo autor_id da tabela artigo conferindo antes se o campo post_autor corresponde ao campo user_nicename da tabela autor.
Esse exemplo em php funciona perfeitamente, mas como você notou nós utilizamos duas queries, e o intuito aqui é utilizar apenas um, vamos ver como fazer isso com um update em duas tabelas
3- O grande segredo está na montagem da query, veja como você deve montar a query usando o inner join:
Fácil né, resolvemos aqui nosso problema, mas vejamos outros exemplos com mais condições:
Caso você precise conferir mais condições, basta ir inserindo AND e a condição em sí, mas e se o update envolvesse mais tabelas? Bem, é simples, bastar uní-las com o inner join, veja esse exemplo com quatro tabelas:
Claro que quanto mais condições você colocar nas cláusulas, mais demorado será para executar o comando.
É isso aí, vimos nesse artigo como fazer um update com várias tabelas usando inner join no Mysql
Take care!
Related Posts: