Ir para conteúdo
Marcelo Pereira da Costa

Como alterar a coluna, já existente, de uma tabela tendo como base o resultado de um select desta mesma tabela

Recommended Posts

Boa noite

Gostaria de uma ajuda. Eu tenho uma tabela em que preciso inserir o resultado de um select em um campo, já existente, desta mesma tabela.

 

- O nome da tabela é projeto.

= Eu tenho os campos na tabela: Id_servidor, Matricula e Senha.

- Antes de realizar a inserção eu preciso fazer uma concatenação do Id_servidor  com o campo Matricula truncado, que é o seguinte comando: (SELECT CONCAT(s.Id_servidor, substring(s.Matricula, 1, 3)) FROM projeto s;)

- E agora preciso inserir o resultado do select descrito acima no campo Senha da mesma tabela chamada projeto.

Como consigo fazer isso?

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim

 

UPDATE projeto p1
INNER JOIN (SELECT CONCAT(Id_servidor, substring(Matricula, 1, 3)) as nova_senha,Id_servidor FROM projeto) x1
ON p1.Id_servidor = x1.Id_servidor
SET p1.senha = x1.nova_senha

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
54 minutos atrás, kim.y disse:

Tente assim

 


UPDATE projeto p1
INNER JOIN (SELECT CONCAT(Id_servidor, substring(Matricula, 1, 3)) as nova_senha,Id_servidor FROM projeto) x1
ON p1.Id_servidor = x1.Id_servidor
SET p1.senha = x1.nova_senha

 

Funcionou perfeitamente.

 

Mas ultima pergunta,.

 

Será que este comando ficará pesado (não otimizado) para uma tabela com 700.000 registros?

Compartilhar este post


Link para o post
Compartilhar em outros sites
27 minutos atrás, Marcelo Pereira da Costa disse:

Funcionou perfeitamente.

 

Mas ultima pergunta,.

 

Será que este comando ficará pesado (não otimizado) para uma tabela com 700.000 registros?

Pra você não ter que dar update em todos os registros sempre que inserir um registro novo você pode usar o where nesse update ou você pode criar uma procedure.

 

Eu não entendo muito bem essa parte de otimização, mas por usar subselect acredito que ficará lento.

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 minutos atrás, kim.y disse:

Pra você não ter que dar update em todos os registros sempre que inserir um registro novo você pode usar o where nesse update ou você pode criar uma procedure.

 

Eu não entendo muito bem essa parte de otimização, mas por usar subselect acredito que ficará lento.

Muito obrigado pela resposta, farei alguns testes para ver a velocidade.

Eu terei que fazer este UPDATE em todos os registros, porque será um campo de uma chave primaria, porque existem campos que podem ser idênticos, o que irá comprometer as buscas de informações na tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por nicolasbessa
      Boa tarde!
       
      Como aplicar a regra abaixo em um select?

      Regra Join
      Quando o campo substr(x, 1,1)  ='1'
      montar a chave de pesquisa:
      y = '8' AND y1 =  'L'||lpad( x1, 2)) 

      Quando o campo substrt(x, 1,1) for igual ='A'
      montar a chave de pesquisa:
      y = '8' AND y1 =  'M'||lpad( x1, 2)) 
       
      obrigado!
    • Por teteuvec
      Prezados boa tarde,
       
      Estou tentando escrever na tela o resultado de um select na tela utilizando WHILE, porém está entrando em loop infinito e gostaria de ajuda para acertar a sintaxe desta técnica.
       
       
      Código apenas com 1 WHILE
      <?php $_SESSION['DB_base'] = 'tupa'; $_SESSION['table_base'] = 'people_records'; $query_Recordset2 = "SELECT * FROM {$_SESSION['table_base']} WHERE `link_record` = {$data1['id']} AND `record_caracter_id` = 1 order by {$_SESSION['id_base']} DESC"; $Recordset2 = mysqli_query($connect, $query_Recordset2) or die(mysqli_error($connect)); $row_Recordset2 = mysqli_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysqli_num_rows($Recordset2); while($Recordset2 = mysqli_fetch_assoc($Recordset2)) { echo "Contato: ".$Recordset2["name"]."</br>"; echo "CPF/CNPJ: ".$Recordset2["cpf_cnpj"]."</br>"; echo "e-mail: ".$Recordset2["email"]."</br>"; echo "Celular: ".$Recordset2["cellphone"]."</br>"; echo "Telefone: ".$Recordset2["telephone"]."</br>"; echo "Documento de identificação: ".$Recordset2["name"]."</br>"; echo "</br>"; }?>  
       
      Código inteiro:
      <?php session_start(); $_SESSION['last_page'] = $_SERVER['PHP_SELF']; $_SESSION['del_message'] = 'Deseja excluir o cliente '; $_SESSION['DB_base'] = 'tupa'; $_SESSION['table_base'] = 'people_records'; $_SESSION['id_base'] = 'id'; require_once('connections.php'); $query_Recordset1 = "SELECT * FROM {$_SESSION['table_base']} WHERE record_caracter_id = '0' order by {$_SESSION['id_base']} DESC"; $Recordset1 = mysqli_query($connect, $query_Recordset1) or die(mysql_error()); $row_Recordset1 = mysqli_fetch_assoc($Recordset1); $totalRows_Recordset1 = mysqli_num_rows($Recordset1); ?> <!doctype html> <html lang='pt-br'> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Tupã - Serviços de Engenharia</title> <link href='css/sistema.css' rel='stylesheet' type='text/css' media='all'> <style type="text/css"> #cnpj { display: none; } #contato { display: none; } #endereco { display: none; } </style> </head> <body> <fieldset> <legend>Gerenciamento de Clientes</legend> <table id="tabela"> <thead> <tr> <th>Descrição</th> <th>Contato</th> <th>Projetos</th> <th colspan="3">Ação</th> </tr> <tr> <th></th> <th></th> <th></th> <th colspan="3"><input type="submit" value="Filtrar" /> | <input type="button" onclick="javascript: location.href='#rec_openModal'" value="Adicionar" /></th> </tr> </thead> <?php while ($Recordset1 = $row_Recordset1){?> <tr> <td bgcolor="#F5F5F5"><p> Código: <?php echo $Recordset1['id']; ?> <br /> Cliente: <?php echo $Recordset1['name']; ?> <br /> CPF/CNPJ: <?php echo $Recordset1['cpf_cnpj']; ?> <br /> e-mail: <?php echo $Recordset1['email']; ?> <br /> Celular: <?php echo $Recordset1['cellphone']; ?> <br /> Telefone: <?php echo $Recordset1['telephone']; ?> <br /> Documento de identificação: <?php if(file_exists('imagens/clients/energy_bill/'.$Recordset1['id'].'.jpg')) { echo 'Documento de identificação: <a href=imagens/clients/energy_bill/'.$Recordset1['id'].'.jpg target="_blank"><img src="imagens/view.png" width="24" height="24">'; } else { echo 'Documento de identificação: indisponível'; } ?> </p></td> <td bgcolor="#F5F5F5"><?php $_SESSION['DB_base'] = 'tupa'; $_SESSION['table_base'] = 'people_records'; $query_Recordset2 = "SELECT * FROM {$_SESSION['table_base']} WHERE `link_record` = {$data1['id']} AND `record_caracter_id` = 1 order by {$_SESSION['id_base']} DESC"; $Recordset2 = mysqli_query($connect, $query_Recordset2) or die(mysqli_error($connect)); $row_Recordset2 = mysqli_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysqli_num_rows($Recordset2); while($Recordset2 = mysqli_fetch_assoc($Recordset2)) { echo "Contato: ".$Recordset2["name"]."</br>"; echo "CPF/CNPJ: ".$Recordset2["cpf_cnpj"]."</br>"; echo "e-mail: ".$Recordset2["email"]."</br>"; echo "Celular: ".$Recordset2["cellphone"]."</br>"; echo "Telefone: ".$Recordset2["telephone"]."</br>"; echo "Documento de identificação: ".$Recordset2["name"]."</br>"; echo "</br>"; }?> </td> <td bgcolor="#F5F5F5"><?php $_SESSION['DB_base'] = 'tupa'; $_SESSION['table_base'] = 'projects_link_tpm'; $query_Recordset3 = "SELECT * FROM {$_SESSION['table_base']} where people_record_id = {$row_Recordset1['id']} order by {$_SESSION['id_base']} DESC"; $Recordset3 = mysqli_query($connect, $query_Recordset3) or die(mysqli_error($connect)); $row_Recordset3 = mysqli_fetch_assoc($Recordset3); $totalRows_Recordset3 = mysqli_num_rows($Recordset3); while($data3 = mysqli_fetch_assoc($Recordset3)) { echo "Projeto: ".$Recordset3["id"]."</br>"; echo "</br>"; }?> </td> <td width="3%" bgcolor="#F5F5F5"><form action="mysql/update_process.php" method="POST"> <input type="hidden" name="update_process" value="<?php echo $row_Recordset1[$_SESSION['id_base']] ?>"> <input type="image" name="submit" src="imagens/edit.png" width="24" height="24"> </form></td> <td bgcolor="#F5F5F5"><form action="mysql/del_process.php" method="POST"> <input type="hidden" name="delete_process" value="<?php echo $row_Recordset1[$_SESSION['id_base']] ?>"> <input type="hidden" name="delete_register" value="<?php echo $row_Recordset1['name'] ?>"> <input type="image" name="submit" src="imagens/delete.png" width="24" height="24"> </form></td> </tr> <?php }?> </table> </fieldset> <div id="rec_openModal" class="modalDialog"> <div> <a class="close" title="Fechar" href="#close">X</a> <fieldset> <legend>Realizar cadastro</legend> <br> <label>Modalidade:</label> <select name="modality" onChange="mostraDiv(this.value)"> <option value="1">Cliente CPF</option> <option value="2">Cliente CNPJ</option> <option value="3">Contato de cliente</option> <option value="4">Endereço de cliente</option> </select> <br /> <div id="cpf"> <form action="mysql/insert_process.php" method="post" id='1'> <br> <label>Nome: </label> <input name='name' type='text' /><br /> <br> <label>CPF: </label> <input name='cpf_cnpj' type='number' data-mask='000.000.000-00' /><br /> <br> <label>e-mail: </label> <input name='email' type='text' /><br /> <br> <label>Celular: </label> <input name='cellphone' type='text' data-mask="(00)0000-0000" /><br /> <br> <label>Telefone: </label> <input name='telephone' type='text' data-mask='(00)00000-0000' autocomplete='off' /><br /> <br> <label>Documento de identificação: </label> <input type='file' name='doc_id'><br /> <INPUT TYPE="hidden" NAME="record_caracter_id" VALUE="0"><INPUT TYPE="hidden" NAME="action" VALUE="0"> <br> <label><input type="submit" value="Cadastrar" /> </label><br /> </form> </div> <div id="cnpj"> <form action="mysql/insert_process.php" method="post" id='2'> <br> <label>Nome da empresa: </label> <input name='name' type='text' /><br /> <br> <label>CNPJ: </label> <input name='cpf_cnpj' type='text' data-mask="00.000.000/0000-00" /><br /> <br> <label>e-mail: </label> <input name='email' type='email' /><br /> <br> <label>Celular: </label> <input name='cellphone' type='text' data-mask="00000-000" /><br /> <br> <label>Telefone: </label> <input name='telephone' type='text' /><br /> <br> <label>Documento de identificação: </label> <input name='doc_id' type='file' /><br /> <INPUT TYPE="hidden" NAME="record_caracter_id" VALUE="0"><INPUT TYPE="hidden" NAME="action" VALUE="0"> <br> <label><input type="submit" value="Cadastrar" /> </label><br /> </form> </div> <div id="contato"> <form action="mysql/insert_process.php" method="post" id='3'> <br> <label>Nome: </label> <input name='name' type='text' /><br /> <br> <label>cpf: </label> <input name='cpf' type='number' data-mask='000.000.000-00' /><br /> <br> <label>e-mail: </label> <input name='email' type='text' /><br /> <br> <label>Celular: </label> <input name='cellphone' type='text' data-mask="(00)0000-0000" /><br /> <br> <label>Telefone: </label> <input name='telephone' type='text' data-mask='(00)00000-0000' autocomplete='off' /><br /> <br> <label>Documento de identificação: </label> <input type='file' name='doc_id'><br /> <INPUT TYPE="hidden" NAME="record_caracter_id" VALUE="1"><br> <label>Contato do cliente </label> <select name="link_record"> <?php while ($data = mysqli_fetch_array($Recordset1)) { echo("<option value='".$data['id']."'>".$data['name']."</option>"); } ?> </select><br /> <INPUT TYPE="hidden" NAME="action" VALUE="0"> <br> <label><input type="submit" value="Cadastrar" /> </label><br /> </form> </div> <div id="endereco"> <form action="mysql/insert_process.php" method="post" id='4'> <br> <label>CEP: </label> <input name='cep' type='text' /><br /> <br> <label>Logradouro: </label> <input name='address' type='text' data-mask="00000-000" autocomplete="off" /><br /> <br> <label>Número: </label> <input name='number' type='text' /><br /> <br> <label>Bairro: </label> <input name='neighborhood' type='text' /><br /> <br> <label>Cidade/UF: </label> <input name='city' type='text' /><input name='uf' type='text' /><br /> <INPUT TYPE="hidden" NAME="record_caracter_id" VALUE="4"><INPUT TYPE="hidden" NAME="action" VALUE="1"> <br> <label><input type="submit" value="Cadastrar" /> </label><br /> </form> </div> </fieldset> </div> </div> </body> </html> <?php mysqli_free_result($Recordset1); mysqli_free_result($Recordset2); mysqli_free_result($Recordset3); ?>  
    • Por teteuvec
      Prezados boa noite!
       
      Gostaria de ajuda com um problemas na pesquisa select do trecho abaixo. Devo estar errando na sintaxe.
       
      O erro que retorna é Unknown column 'link_record' in 'where clause', porém esta coluna existe!
       
      <td bgcolor="#F5F5F5"><?php $query_Recordset2 = "SELECT * FROM {$_SESSION['table_base']} WHERE `link_record` = {$data1['id']} AND `record_caracter_id` = '1' order by {$_SESSION['id_base']} DESC"; $Recordset2 = mysqli_query($connect, $query_Recordset2) or die(mysqli_error($connect)); $row_Recordset2 = mysqli_fetch_assoc($Recordset2); $totalRows_Recordset2 = mysqli_num_rows($Recordset2); while($data2 = mysqli_fetch_assoc($Recordset2)) { echo "Contato: ".$data2["name"]."</br>"; echo "CPF/CNPJ: ".$data2["cpf_cnpj"]."</br>"; echo "e-mail: ".$data2["email"]."</br>"; echo "Celular: ".$data2["cellphone"]."</br>"; echo "Telefone: ".$data2["telephone"]."</br>"; echo "Documento de identificação: ".$data2["name"]."</br>"; echo "</br>"; }?> </td>  
    • Por Omar~
      Estou precisando fazer uma query em uma tabela usando LIKE, mas preciso restringir que somente sejam mostrados os resultados cujo tenha uma das colunas idênticas.
      Exemplo de query (que está errada!!!)
      SELECT     coluna_A,     coluna_B,     coluna_C FROM     tabela WHERE     coluna_A LIKE '%ALGUM_VALOR%' OR     coluna_B LIKE '%ALGUM_VALOR%' AND     coluna_C = 'tenha esse valor' Então preciso pesquisar existência de "algum valor" dentro das colunas A e B da tabela, mas que sejam retornados apenas resultados cujo a coluna C seja apenas um valor, que pode duplicar de registro para registro, mas na mesma tabela possuem outros registros cujo a coluna C não são iguais.
       
      Obs.: Sempre fiz esse processo de filtrar o resultado via PHP, mas queria saber como fazer diretamente na query.

      #EDIT:
      Sendo mais específico
      Digamos registros mais ou menos assim:
       
      SELECT coluna_A, coluna_B, coluna_C FROM tabela WHERE coluna_A LIKE '%João%' OR coluna_B LIKE '%João% AND   coluna_C = 'Carpinteiro'
      Ou seja mesmo que que haja mais de um registro, somente é para trazer os resultados cujo a coluna C for carpinteiro
       
       
       
       
    • Por mcflymito
      há um jeito de separar valores inseridos dentro de uma coluna
      e exibi-los também separados, ex: os valores 120, 160 estão salvos na mesma coluna, mas quero exibilos separadamente, tipo: valor1, valor2
       
      eu só consigo exibir eles juntos, como se fossem um só numero
       
       
       

×

Informação importante

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