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 netocazuza
      Gostaria que alguém me ajudasse a encontrar erro num código. Estou fazendo um curto na net, e tentando adaptar o código que funciona para ir aprimorando a aprendizagem. Então vou colocar dois códigos aqui, onde um funciona o outro não. O que funciona é o do curso com mais campos. O que fiz foi apenas adaptar esse código que funciona para uma quantidade bem menor, e ver se funciona. Os dois códigos abre o formulário, aparentemente consultam o banco com sucesso, porém só o original está alterando, certamente por algum erro meu. Mas já olhei trocentas vezes, postei dúvida lá no curso, e o cara não responde, então tô parado na aprendizagem por conta disso. Basicamente é um formulário de cadastro de transportadoras onde o usuário altera os dados de uma transportadora através desse formulário. Esse tá funcionando tudo certinho. Tentei reproduzir esse mesmo formulário, porém apenas com dois campos (cidade e estado), e mesmo assim não funciona. Lista certinho, mas não altera, por isso acho que é um erro simples. Segue os dois códigos pra que comparem:
      CÓDIGO QUE FUNCIONA:
      <?php require_once("conexao/conexao.php"); ?> <?php     if (isset($_POST["nometransportadora"])){         $nome = utf8_decode($_POST["nometransportadora"]);         $endereco = utf8_decode($_POST["endereco"]);         $cidade = utf8_decode($_POST["cidade"]);         $estado = $_POST["estados"];         $cep = $_POST["cep"];         $cnpj = $_POST["cnpj"];         $telefone = $_POST["telefone"];         $tID = $_POST["transportadoraID"];         // CRIAR O OBJETO PARA ALTERAR         $alterar = "UPDATE transportadoras ";         $alterar .= "SET ";         $alterar .= "nometransportadora = '{$nome}', ";         $alterar .= "endereco = '{$endereco}', ";         $alterar .= "cidade = '{$cidade}', ";         $alterar .= "estadoID = {$estado}, ";         $alterar .= "cep = '{$cep}', ";         $alterar .= "cnpj = '{$cnpj}', ";         $alterar .= "telefone = '{$telefone}' ";         $alterar .= "WHERE transportadoraID = {$tID}";         $operacao_alterar = mysqli_query($conecta, $alterar);         if (!$operacao_alterar){             die("Erro na alteração!");         }else {             header("location: listagem2.php");         }     }     // Consulta a tabela de transportadoras.     $tr = "SELECT * ";     $tr .= "FROM transportadoras ";     if (isset($_GET["codigo"])){         $id = $_GET["codigo"];         $tr .= "WHERE transportadoraID = {$id} ";     }else {         $tr .= "WHERE transportadoraID = 1 ";     }     $con_transportadora = mysqli_query($conecta, $tr);     if (!$con_transportadora){         die("Erro na consulta");     }     $info_transportadora = mysqli_fetch_assoc($con_transportadora);          // Consulta aos estados     $estados = "SELECT * ";     $estados .= "FROM estados ";     $lista_estados = mysqli_query($conecta, $estados);     if (!$lista_estados){         die("erro no banco");     } ?> <!doctype html> <html>     <head>         <meta charset="UTF-8">         <title>Curso PHP INTEGRACAO</title>                  <!-- estilo -->         <link href="_css/estilo.css" rel="stylesheet">         <link href="_css/alteracao.css" rel="stylesheet">     </head>     <body>         <?php include_once("_incluir/topo.php"); ?>                  <main>               <div id="janela_formulario">                 <form action="alteracao.php" method = "post">                     <h2>Alteração de Transportadoras</h2>                     <label for="nometransportadora">Nome da Transportadora</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["nometransportadora"]) ?>" name = "nometransportadora" id = "nometransportadora">                     <label for="endereco">Endereço</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["endereco"]) ?>" name = "endereco" id = "endereco">                     <label for="cidade">Cidade</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["cidade"]) ?>" name = "cidade" id = "cidade">                     <label for="estados">Estados</label>                     <select id = "estados" name = "estados">                         <?php                              $meuestado = $info_transportadora["estadoID"];                             while ($linha = mysqli_fetch_assoc($lista_estados)){                             $estado_principal = $linha["estadoID"];                             if ($meuestado == $estado_principal){                         ?>                             <option value="<?php echo $linha["estadoID"] ?>" selected>                                 <?php echo utf8_encode($linha ["nome"]) ?>                             </option>                             <?php                             } else {                              ?>                                 <option value="<?php echo $linha["estadoID"] ?>">                                 <?php echo utf8_encode($linha ["nome"]) ?>                                 </option>                         <?php                              }                             }                         ?>                                              </select>                     <label for="cep">CEP</label>                     <input type = "text" value = "<?php echo ( $info_transportadora["cep"]) ?>" name = "cep" id = "cep">                     <label for="telefone">Telefone</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["telefone"]) ?>" name = "telefone" id = "telefone">                     <label for="cnpj">CNPJ</label>                     <input type = "text" value = "<?php echo utf8_encode( $info_transportadora["cnpj"]) ?>" name = "cnpj" id = "cnpj">                     <input type = "hidden" name = "transportadoraID" value = "<?php echo $info_transportadora["transportadoraID"] ?>">                     <input type = "submit" value="Confirmar Alteração">                 </form>             </div>         </main>         <?php include_once("_incluir/rodape.php"); ?>       </body> </html>  
      CÓDIGO QUE NÃO FUNCIONA. (Lista tudo certinho, mas não altera, nem traz o estádo pré-checado).
      <?php require_once("conexao/conexao.php"); ?> <?php     if( isset($_POST["nomeCidade"]) ) {         $nomeCidade       = utf8_decode($_POST["nomeCidade"]);         $estado     = $_POST["estados"];         $cID        = $_POST["cidadeID"];                  // Objeto para alterar         $alterar = "UPDATE cidades ";         $alterar .= "SET ";         $alterar .= "nomeCidade = '{$nomeCidade}', ";         $alterar .= "estadoID = {$estado} ";         $alterar .= "WHERE cidadeID = {$cID} ";         $operacao_alterar = mysqli_query($conecta, $alterar);         if(!$operacao_alterar) {             die("Erro na alteracao");            } else {             header("location:alterarCidades.php");            }              }     // Consulta a tabela de cidades     $tr = "SELECT * ";     $tr .= "FROM cidades ";     if(isset($_GET["codigo"]) ) {         $id = $_GET["codigo"];         $tr .= "WHERE cidadeID = {$id} ";     } else {         $tr .= "WHERE cidadeID = 1 ";     }          $con_cidade = mysqli_query($conecta,$tr);     if(!$con_cidade) {         die("Erro na consulta");     }     $info_cidade = mysqli_fetch_assoc($con_cidade);          // consulta aos estados     $estados = "SELECT * ";     $estados .= "FROM estados ";     $lista_estados = mysqli_query($conecta, $estados);     if(!$lista_estados) {        die("erro no banco");      }     ?> <!doctype html> <html>     <head>         <meta charset="UTF-8">         <title>Alteração Cidades</title>         <!-- estilo -->         <link href="_css/estilo.css" rel="stylesheet">         <link href="_css/alteracao.css" rel="stylesheet">     </head>     <body>         <?php include_once("_incluir/topo.php"); ?>                  <main>             <div id="janela_formulario">                 <form action="alteracaoCidades.php" method="post">                     <h2>Alteração de Cidades</h2>                                          <label for="nomeCidade">Nome da Cidade</label>                     <input type="text" value="<?php echo utf8_encode($info_cidade["nomeCidade"])  ?>" name="nomeCidade" id="nomeCidade">                     <label for="estados">Estados</label>                     <select id="estados" name="estados">                          <?php                              $meuestado = $info_cidade["estadoID"];                             while($linha = mysqli_fetch_assoc($lista_estados)) {                                 $estado_principal = $linha["estadoID"];                                 if($meuestado == $estado_principal) {                         ?>                             <option value="<?php echo $linha["estadoID"] ?>" selected>                                 <?php echo utf8_encode($linha["nome"]) ?>                             </option>                         <?php                                 } else {                         ?>                             <option value="<?php echo $linha["estadoID"] ?>" >                                 <?php echo utf8_encode($linha["nome"]) ?>                             </option>                                                 <?php                                  }                             }                         ?>                     </select>                     <input type="hidden" name="cidadeID" value="<?php echo $info_cidade["cidadeID"] ?>">                     <input type="submit" value="Confirmar alteração">                                     </form>                </div>         </main>         <?php include_once("_incluir/rodape.php"); ?>     </body> </html>  
       
       
       
    • Por Eduardo Villa
      Salve galera,
       
      Estou trabalhando em um projeto com Codeigniter e me deparei com o seguinte problema:
      1) Ao utilizar uma conexão ODBC não consigo construir um select no model da seguinte forma:
               $this->test->where('xx',$id)->get('dddd'); mas até ai, tudo certo pois utilizei $this->teste->query('dddd'); e funcionou.
      2) No retorno desta consulta ($notas->result_array();) não me traz o nome das colunas...
       
      Exemplo:
      array(24) { ["0131890"]=> string(7) "0131890" ["2018-06-11"]=> string(10) "2018-06-11" [""]=> string(0) "" ["0"]=> string(1) "0" ["AVENIDA ENG, 2544"]=> string(17) "AVENIDA ENG, 2544"
    • Por Bruno Oliviera
      Bom dia estou tento um problema com uma consulta que esta demorado de mais se
      Select prd.EAN, prd.NOME, prd.Estoque_Atual, prd.Preco_Custo, prd.Venda_Vista, te.Nome_Razao, vendp.Quantidade from produto as prd inner join produto_fornecedor as prof on prd.Cod_Produto=prof.Codigo_Produto inner join fornecedor as te on te.Codigo=Codigo_Fornecedor inner join vendas_prods as vendp on prd.Cod_Produto=vendp.Cod_Produto where Codigo_Fornecedor=25 ; puder me ajudar 
    • Por joaoboettcher
      Boa noite Galera, sou novo por aqui, estou com um problema, meu formulário está reportando somente um dados do select quando cadastro o produto.
       
      vou passar o código aqui.
       
      <?php include('db.php'); if (isset($_POST['CadastraPrato'])) { $nome = isset($_POST['nome']) == true ? $_POST['nome']:""; $categoria = isset($_POST['categoria']) == true ? $_POST['categoria']:""; $pic=$_FILES['image']['name']; $tmp_name=$_FILES['image']['tmp_name']; move_uploaded_file($tmp_name, "../images/pratos/".$pic); $insert="INSERT INTO `pratos`(`imagem`, `categoria`) VALUES ('$pic','$categoria')" ; $conn->query($insert); echo "<script>alert('Dados inserido com sucesso')</script>"; } ?> <form method="post" enctype="multipart/form-data"> <div class="card-block"> <div class="row"> <div class="col-sm-6 m-t-35 button_file"> <h5>Selecionar Imagem</h5> <input id="input-4" name="image" type="file" multiple class="file-loading d-block"> </div> </div> <div class="col-12 col-lg-6 m-t-35"> <h5>Selecione a categoria do prato</h5> <select class="form-control" name="categoria" multiple id="multi_select1"> <option disabled selected>Categorias</option> <option value=".acompanhamento">Acompanhamento</option> <option value=".aperitivos">Aperitivos</option> <option value=".camarao">Camarão</option> <option value=".carnes">Carnes</option> <option value=".fritas">Fritas</option> <option value=".peixes">Peixes</option> </select> </div> </div> <button class="btn btn-info" name="CadastraPrato" >Cadastrar</button> </form>  
    • Por PapaiJonh
      Ola, pessoal.
      Estou trabalhando com Web Form e usando SQL como banco de dados.
      Eu tenho um data grid com todos os Professores do meu banco e preciso atualizar essa lista de acordo com as condições.
      a duvida é a seguinte, fiz um CheckBoxList com algumas matérias e estou na duvida de como fazer o select passando por exemplo 3 matérias.
      //Esse é o método que chama o Buscar passando os parâmetros. protected void DdProfessores_SelectedIndexChanged(object sender, EventArgs e)         {             Professor p = new Professor();             dgProfessores.DataSource = p.Buscar_Selecionado(DdProfessores.SelectedValue, RbSexo.SelectedValue, ChbMaterias.SelectedValue);             dgProfessores.DataBind();                      } //Esse é o método do buscar public DataSet Buscar_Selecionado(String n, String s, String m)//Funciona         {             DataSet ds = new DataSet();             SqlConnection com = new SqlConnection("Data Source=JOHN-PC;Initial Catalog=FACEAR;Integrated Security=True");//conexão com o banco             com.Open();             string comando_sql = "select * from PROFESSOR where Id = @Id  and Sexo = @Sexo and Materia = @Materia";//string do comando SQL a ser utilizado             SqlCommand comando = new SqlCommand(comando_sql, com);// intanciando um SqlCommando com a QUERY e a coneção             SqlDataAdapter da = new SqlDataAdapter(comando); //             comando.Parameters.Add("@Id", SqlDbType.Int);             comando.Parameters["@Id"].Value = n;             comando.Parameters.Add("@Sexo", SqlDbType.VarChar);             comando.Parameters["@Sexo"].Value = s;             comando.Parameters.Add("@Materia", SqlDbType.VarChar);             comando.Parameters["@Materia"].Value = m;             SqlDataReader dr = comando.ExecuteReader();             dr.Close();             da.Fill(ds);             return ds;         }  
×

Informação importante

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