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 zackzin
      0votar contrafavorita   Olá, eu estou trabalhando no meu TCC, que é um site para cadastro de vagas de emprego, e também para cadastro de anúncios, no meu site há uma página buscador.php, nela o usuário pode efetuar buscas de anúncios. Porém, estou com um pequeno problema, antes mesmo do usuário efetuar sua busca, nessa página fica disposta todos os registros da base de dados. Abaixo anexei uma imagem da página que seria a página de busca, com o input text, que o usuário utiliza para busca por profissão, e 2 parâmetros pra teste, que são idade mínima e máxima, neste momento, em que não efetuei nenhuma busca o correto seria não aparecer nenhum resultado, abaixo a página buscador.php.
      <?php include_once "config.php"; ?> <!DOCTYPE html> <html> <head> <title>Empregos Alto Vale</title> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <link href="http://fonts.googleapis.com/css?family=Didact+Gothic" rel="stylesheet" /> <link href="default.css" rel="stylesheet" type="text/css" media="all" /> <link href="fonts.css" rel="stylesheet" type="text/css" media="all" /> <meta charset="UTF-8"> </head> <body> <div id="header-wrapper"> <div id="header" class="container"> <div id="logo"> <font face= Impact> <h1><a href="index.html">Empregos Alto Vale</a></h1> </font> </div> <ul> <li><a href="login.php"><button type="button" id="login" class="botaologin">Login</button></a></li> <li><a href="register.php"><button type="submit" id="cadastrar-se" class="botaologin">Cadastrar-se</button></a></li> </ul> <div id="menu"> <ul> <li><a href="index.html" accesskey="1" title="">Início</a></li> <li><a href="empresas.php" accesskey="2" title="">Empresas</a></li> <li><a href="candidatos.php" accesskey="3" title="">Candidatos</a></li> <li><a href="buscador.php" accesskey="4" title="">Buscador</a></li> <li><a href="cadastroanuncio.html" accesskey="6">Cadastro de Anúncios</a></li> <li><a href="contato.html" accesskey="5" title="">Contato</a></li> </ul> </div> </div> <h2>Buscador</h2> <form action="" method="POST" > <input type="text" name="anuncio" placeholder="Busque por anúncios"> Idade Mínima:<input type="number" name="idademin" placeholder="18"> Idade Máxima:<input type="number" name="idademax" placeholder="60"> <input name="sendpesqanun" type="submit" value="Buscar"> </form> </form> <?php $sendpesqanun= filter_input(INPUT_POST,'sendpesqanun', FILTER_SANITIZE_STRING); $idademin = filter_input(INPUT_POST,'idademin', FILTER_SANITIZE_STRING); $idademax = filter_input(INPUT_POST,'idademax', FILTER_SANITIZE_STRING); if($idademin == true and $idademax == true){ $anuncio2 = filter_input(INPUT_POST,'anuncio',FILTER_SANITIZE_STRING); $result_anuncio = "SELECT * FROM cand_anuncios WHERE profissao LIKE '%$anuncio2%' and idade > '$idademin' and idade < '$idademax'"; $resultado_anuncio = mysqli_query($link,$result_anuncio); while($row_anuncio = mysqli_fetch_assoc($resultado_anuncio)){ echo "Nome:" . $row_anuncio['nome'] . "<BR>"; echo "Idade:" .$row_anuncio['idade'] . "<BR>"; echo "Telefone:" .$row_anuncio['telefone'] . "<BR>"; echo "Profissão: " .$row_anuncio['profissao'] . "<BR>"; echo "Descrição: " .$row_anuncio['descricao'] . "<BR>"; echo "" . "<BR>"; } }else if($idademin == true and $idademax == false){ $anuncio3 = filter_input(INPUT_POST,'anuncio',FILTER_SANITIZE_STRING); $result_anuncio = "SELECT * FROM cand_anuncios WHERE profissao LIKE '%$anuncio2%' and idade > '$idademin'"; $resultado_anuncio = mysqli_query($link,$result_anuncio); while($row_anuncio = mysqli_fetch_assoc($resultado_anuncio)){ echo "Nome:" . $row_anuncio['nome'] . "<BR>"; echo "Idade:" .$row_anuncio['idade'] . "<BR>"; echo "Telefone:" .$row_anuncio['telefone'] . "<BR>"; echo "Profissão: " .$row_anuncio['profissao'] . "<BR>"; echo "Descrição: " .$row_anuncio['descricao'] . "<BR>"; echo "" . "<BR>"; } }else if($idademin == false and $idademax == true){ $anuncio4 = filter_input(INPUT_POST,'anuncio',FILTER_SANITIZE_STRING); $result_anuncio = "SELECT * FROM cand_anuncios WHERE profissao LIKE '%$anuncio2%' and idade < '$idademax'"; $resultado_anuncio = mysqli_query($link,$result_anuncio); while($row_anuncio = mysqli_fetch_assoc($resultado_anuncio)){ echo "Nome:" . $row_anuncio['nome'] . "<BR>"; echo "Idade:" .$row_anuncio['idade'] . "<BR>"; echo "Telefone:" .$row_anuncio['telefone'] . "<BR>"; echo "Profissão: " .$row_anuncio['profissao'] . "<BR>"; echo "Descrição: " .$row_anuncio['descricao'] . "<BR>"; echo "" . "<BR>"; } }else{ $anuncio = filter_input(INPUT_POST,'anuncio', FILTER_SANITIZE_STRING); $result_anuncio = "SELECT * FROM cand_anuncios WHERE profissao LIKE '%$anuncio%'"; $resultado_anuncio = mysqli_query($link,$result_anuncio); while($row_anuncio = mysqli_fetch_assoc($resultado_anuncio)){ echo "Nome:" . $row_anuncio['nome'] . "<BR>"; echo "Idade:" .$row_anuncio['idade'] . "<BR>"; echo "Telefone:" .$row_anuncio['telefone'] . "<BR>"; echo "Profissão: " .$row_anuncio['profissao'] . "<BR>"; echo "Descrição: " .$row_anuncio['descricao'] . "<BR>"; echo "" . "<BR>"; }} ?> </body> </html>  

    • Por empirerock
      Boa tarde. Preciso de ajuda. Não consigo resolver esta situação.
      Neste código, o retorno está se baseando somente no primeiro item da lista.
      O que preciso é que se em alguma linha, o Volume_Restante for maior que zero e menor que Volume_Total, o status seja 'P'.
      E se todas as linhas de Volume_Restante forem iguais a zero, então status = 'T'.
      E se todas as linhas de Volume_Restante forem iguais a Volume_Total, então status = 'N'.
      Só que nesse caso, ele viu a primeira linha que volume_restante era zero, e jogou no status 'T', ignorando a outra linha que tem valor 1.
      Abaixo print da tela da lista de produtos para entrega.
       
      Script
      include "topop.php"; include "mysql.php"; $ped_venda_id = 13; $sql = mysql_query ("SELECT pvi.ped_venda_id, IF(pvi.volume_restante = 0, 'T', IF(pvi.volume_total = pvi.volume_restante, 'N', 'P')) as 'status' FROM ped_vendas_item as pvi WHERE ped_venda_id = '$ped_venda_id' ") or die(mysql_error()); while($r = mysql_fetch_array($sql)){ $status = $r['status']; } echo $status;  

    • Por Eliabe Andrade
      Boa noite pessoal, estou iniciando em programação web, e já estou desenvolvendo um projeto pequeno para a empresa que trabalho e a minha dificuldade é a seguinte, possuo um campo SELECT/OPTION, onde o usuário seleciona o produto e  caso ele queira adicionar mais produtos é só clicar no botão adicionar, até tudo ok, a minha dificuldade esta em fazer com que os valores dos produtos se somem em um INPUT, até consegui exibir o valor mas quando adiciono mais um campo e seleciono o produto, ao invés dele somar ele substitui o valor do produto anterior, segue abaixo meu teste que até agora por zilhões de tentativas não obtive exito e agora peço ajuda aos senhores que tem mais experiência.
       
      <?php include_once("../conexao/conexao.php"); $conexao = conexao::getInstance(); $sql = "SELECT * FROM produtos"; $stm = $conexao->prepare($sql); $stm->execute(); $produtos = $stm->fetchAll(PDO::FETCH_OBJ); ?> <!doctype html> <html lang="pt-br"><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Cadastro de Cliente</title> <link rel="stylesheet" type="text/css" href="../administrativo/css/bootstrap.min.css" rel="stylesheet" media="screen"> <link href="../administrativo/css/bootstrap-datetimepicker.min.css" rel="stylesheet" media="screen"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="../administrativo/js/jquery.mask.js"></script> <style type="text/css"> body { margin: 0; padding: 0;} .box { margin: 0 auto; width: 800px;} #fieldsHidden{ display:none;} #alvo{padding:10px 5px;} .margens{ margin-left: 2px; margin-right: 2px; } #p{ margin-left: 2px; margin-right: 2px; } </style> <script type="text/javascript"> $(document).ready(function(){ $('body').on('change','.prod_tipo' , function() { var id = $(this).data('id'); $('#' + id).val($(this).find(':selected').data('valor')); }); $('body').on('change','.prod_tipo' , function() { function convertMoeda(n, c, d, t) { c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? "," : d, t = t == undefined ? "." : t, s = n < 0 ? "-" : "", i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0; return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : ""); } var id = $(this).data('id'); var soma = 0; $(this).find(':selected').each(function(id, element){ soma = soma + parseFloat($(element).data('somar_valor' + id)) }) $('#valor_total').val(convertMoeda(soma)); }); var contar = 1; $("#add").on('click', function(){ var select = '<div class="form-group"><div class="form-inline row margens">'; select += '<div class="form-group col">'; select += '<label for="vnd_tipo_vendedor" class="label label-small" style="color: black;">TIPO PRODUTO:</label><br><select data-id="' + contar + '" data-conta_campos="' + contar + '" class="form-control custom-select prod_tipo" name="prod_tipo[]" id="prod_tipo" data-error="Por favor, selecione um produto." required><option value="" >PRODUTO: </option><?php foreach($produtos as $produto): ?><option value="<?= $produto->produto ?>" name="id" data-valor="<?= number_format($produto->valor, 2, ',','.') ?>" data-somar_valor0="<?= $produto->valor ?>" ><?= $produto->produto ?></option><?php endforeach;?></select>'; select += '<div class="help-block with-errors"></div></div>'; select += '&nbsp;<div class="form-group col">'; select +='<label for="vnd_tipo_vendedor" class="label label-small" style="color: black;">VALOR:</label><br><div class="input-group"><span class="input-group-addon">R$</span><input id="' + contar + '" class="form-control dinheiro" id="prod_valor" name="prod_valor[]" type="text" value="" size="6" required></div>'; select +='<div class="help-block with-errors"></div></div>'; select +='</div>&nbsp;<button type="button" class="btn btn-danger btn-sm del" id="add"><span class="glyphicon glyphicon-minus"></span>&nbsp;Remover</button></div>'; contar++; $("#produtos").append(select); return false; }); $(document).on('click', '.del', function(){ $(this).parent().remove(); }); }); </script> <script type="text/javascript"> $(document).ready(function(){ //$('#cod_cli').mask('999999999'); //$('#rg').mask('99.999.999', {reverse: true}); //$('.cpf').mask('000.000.000-00', {reverse: true}); //$('#cep').mask('99.999-999'); //$('#telefone').mask('(99) 9999-9999'); //$('#celular').mask('(99) 99999-9999'); //$('#exame').mask('000.000.000.000.000,00', { // reverse: true //}); //$('#armacao').mask('000.000.000.000.000,00', { // reverse: true //}); //$('#prod_valor').mask('000.000.000.000.000,00', { // reverse: true //}); $('.dinheiro').mask('000.000.000.000.000,00', { reverse : true }); }); </script> </head> <body> <div class='container-fluid'> <button type="button" class="btn btn-primary btn-sm" id="add"><span class="glyphicon glyphicon-plus"></span>&nbsp;Adicionar Produto</button><br><br> <form class="form form-inline" action="" method="post"> <fieldset> <div class="form-group"> <div class="form-inline row margens"> <div class="form-group col"> <label for="prod_tipo" class="label label-small" style="color: black;">TIPO DE PRODUTO:</label><br> <select data-id="0" data-conta_campos="0" class="form-control custom-select prod_tipo" name="prod_tipo[]" id="prod_tipo" data-error="Por favor, selecione um produto." required > <option value="" >PRODUTO: </option> <?php foreach($produtos as $produto): ?> <option value="<?= $produto->produto ?>" name="id" data-valor="<?= number_format($produto->valor, 2, ',','.') ?>" data-somar_valor0="<?= $produto->valor ?>" ><?= $produto->produto ?></option> <?php endforeach;?> </select> <div class="help-block with-errors"></div> </div> <div class="form-group col"> <label for="prod_valor" class="label label-small" style="color: black;">VALOR:</label><br> <div class="input-group"> <span class="input-group-addon">R$</span> <input class="form-control dinheiro" id="0" name="prod_valor[]" type="text" value="" size="6" required> </div> <div class="help-block with-errors"></div> </div> </div> </div><br> <div class="form-group"> <div class="form-inline row margens" id="produtos"> <!-- INPUT'S DINAMICOS --> </div> </div><br> <div class="form-group"> <div class="form-inline row margens"> <div class="form-group col"> <label for="prod_valor" class="label label-small" style="color: black;">VALOR TOTAL:</label><br> <div class="input-group"> <span class="input-group-addon">R$</span> <input type="text" name="valor_total" id="valor_total" class='form-control dinheiro'/> </div> <div class="help-block with-errors"></div> </div> </div> </div> </fieldset> </form> </div> </body> <script src="../administrativo/js/bootstrap.min.js"></script> </html>  
    • Por coolroot
      Prezados,
      Estou precisando de ajuda com um select que eu fiz na marra, porem, preciso aprimorar e eu confesso que não tenho conhecimento suficiente no assunto.
      O problema é o seguinte, estou trazendo dados de uma base do zabbix, no momento, o select traz o resultado do ultimo valor inserido, preciso trazer dos três ultimos e fazer uma média da coluna value.
       
      SELECT h.name, h.description, (SELECT history.VALUE FROM history WHERE history.itemid = i.itemid ORDER BY history.clock DESC LIMIT 1) AS 'value' FROM zabbix.hosts AS h JOIN hosts_groups AS hg ON hg.hostid = h.hostid JOIN groups AS g ON g.groupid = hg.groupid JOIN items AS i ON i.hostid = h.hostid WHERE g.name = 'filiais' AND i.name = 'ICMP loss' AND h.status = 0;  
      Anexei um print de como os dados estão vindo.
       
       
      É viável fazer isso? o que eu poderia usar
       

    • Por Blogger
      Boa noite pessoal, eh meu primeiro topico aqui, preciso muito da ajuda de voces para resolver uma questao em meu site...
      Tenho um aplicativo que puxa algumas informacoes do meu site via http.. certo..
      uma delas sao 2 horarios, de abertura e de fexamento, supoe o seguinte:
       
      HorInicio: 8:00
      Horfim: 18:00     
      No php fica assim..
      (esse date(`w`) == 2) confere se hoje eh terca feira, tenho um desse para cada dia da semana)
      if(date('w') == 2){ // caso a hora atual for maior ou igual a hora inicio e menor ou igual ao fim ele manda true para meu app e ele entende que esta aberto if(date('H:i') >= $ini AND date('H:i') <= $fim){ echo true; } else { echo 0; } } Eu consegui configurar de uma forma que ele entenda que o estabelecimento fica aberto entre esses dois horarios, porem, surgiu a necessidade de colocar o seguinte:
      HorInicio:18:00
      Horfim: 2:00 (Sendo esse horario duas horas da madrugada do dia seguinte)
       
      a questao eh, como fazer meu codigo de php entender que essas 2:00 se trata do dia seguinte? pois da forma atual ele pega o intervalo entre 2:00 e 18:00 (3:00, 4:00, ate as 18:00)
      e eu gostaria que fosse das 18:00 para frente (19:00, 20:00, ate as 2:00)
       
      No meu banco esta definido apenas como tempo atual sem a data, eh possivel fazer sem cadastrar uma data no banco? apenas com o tempo... e se nao for possivel, como fazer isso ser automatico? toda vez que ele for entrar nesse php ele entender qual dia eh hoje e que fica aberto ate amanha ate que horas..
       
      Desculpe se ficou meio confuso.. mas qualquer duvida podem perguntar que eu vou responder, espero alguma luz, obrigado!
       
×

Informação importante

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