Jump to content

Question

Vi um tópico aqui parecido mas não entendi a lógica. Então fiquei na dúvida. Estou tentando copiar dados de uma tabela para outra e inserir em um campo um valor.

 

INSERT INTO bancoferramenta.tb_historicoferramentas (codigoferramenta_str, numeroconjunto_int ) SELECT cf.codigoferramenta_str, ncf.numeroconjunto_int FROM bancoferramenta.tb_conjuntoferramentas AS cf,  bancoferramenta.tb_numeroconjuntoferramentas AS ncf WHERE cf.idnumeroconjuntoferramentas_int_fk = ncf.idnumeroconjuntoferramentas_int  AND cf.idnumeroconjuntoferramentas_int_fk = 19 ; 

Funciona de boa. Só que eu preciso inserir a data, entao tentei o seguinte

 

INSERT INTO bancoferramenta.tb_historicoferramentas (codigoferramenta_str, numeroconjunto_int, datacadastro_dt ) VALUES (( SELECT cf.codigoferramenta_str, ncf.numeroconjunto_int FROM bancoferramenta.tb_conjuntoferramentas AS cf,  bancoferramenta.tb_numeroconjuntoferramentas AS ncf WHERE cf.idnumeroconjuntoferramentas_int_fk = ncf.idnumeroconjuntoferramentas_int  AND cf.idnumeroconjuntoferramentas_int_fk = 19), 2017-08-02 ); 

E da o erro  

 

Error Code: 1136. Column count doesn't match value count at row 1

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
INSERT INTO bancoferramenta.tb_historicoferramentas (codigoferramenta_str, numeroconjunto_int, datacadastro_dt ) VALUES (( SELECT cf.codigoferramenta_str, ncf.numeroconjunto_int, '2018-09-10' as nfc.data FROM bancoferramenta.tb_conjuntoferramentas AS cf,  bancoferramenta.tb_numeroconjuntoferramentas AS ncf WHERE cf.idnumeroconjuntoferramentas_int_fk = ncf.idnumeroconjuntoferramentas_int  AND cf.idnumeroconjuntoferramentas_int_fk = 19)); 

 

Você deve definir o campo inexistente na sub-consulta, pois imagina o seguinte, na sub-consulta que você realiza, você traz:

todos os dados + '2018-09-10'

 

Você deve fazer de uma maneira onde a data venha com cada item da consulta:

 

cf.codigoferramenta_str, ncf.numeroconjunto_int, '2018-09-10'

 

Assim, os campos batem.

 

Espero ter ajudado

  • +1 1

Share this post


Link to post
Share on other sites
  • 0

Deu erro de sintaxe

INSERT INTO bancoferramenta.tb_historicoferramentas (codigoferramenta_str, numeroconjunto_int, datacadastro_dt ) VALUES (( SELECT cf.codigoferramenta_str, ncf.numeroconjunto_int, '2018-09-10' as ncf.datacadastro_dt FROM bancoferramenta.tb_conjuntoferramentas AS cf,  bancoferramenta.tb_numeroconjuntoferramentas AS ncf WHERE cf.idnumeroconjuntoferramentas_int_fk = ncf.idnumeroconjuntoferramentas_int  AND cf.idnumeroconjuntoferramentas_int_fk = 19)); 

Share this post


Link to post
Share on other sites
  • 0

Dê o describe na tabela 

tb_historicoferramentas

 

Depois, poste aqui o resultado 

 

Share this post


Link to post
Share on other sites
  • 0

Obrigado Alisson Zampietro,

 

Consegui

 

INSERT INTO bancoferramenta.tb_historicoferramentas (codigoferramenta_str, numeroconjunto_int, datacadastro_dt ) SELECT cf.codigoferramenta_str, ncf.numeroconjunto_int, NOW() FROM bancoferramenta.tb_conjuntoferramentas AS cf,  bancoferramenta.tb_numeroconjuntoferramentas AS ncf WHERE cf.idnumeroconjuntoferramentas_int_fk = ncf.idnumeroconjuntoferramentas_int  AND cf.idnumeroconjuntoferramentas_int_fk = 19;

 

 

Fica uma receita de bolo para quem quiser (para estudo)

 

CREATE TABLE `tabela1` (
  `idtabela1` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(45) DEFAULT NULL,
  `idade` varchar(45) DEFAULT NULL,
  `data` datetime DEFAULT NULL,
  PRIMARY KEY (`idtabela1`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


CREATE TABLE `tabela2` (
  `idtabela2` int(11) NOT NULL AUTO_INCREMENT,
  `idtabela3_fk` int(11) NOT NULL,
  `nome` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idtabela2`),
  KEY `idtabela3_fk_fk_idx` (`idtabela3_fk`),
  CONSTRAINT `idtabela3_fk_fk` FOREIGN KEY (`idtabela3_fk`) REFERENCES `tabela3` (`idtabela3`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `tabela2` VALUES (1,3,'PAULO'),(2,3,'JOÃO'),(3,3,'FABIO'),(4,2,'MARIA'),(5,1,'LETICIA');

CREATE TABLE `tabela3` (
  `idtabela3` int(11) NOT NULL AUTO_INCREMENT,
  `idade` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idtabela3`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;



INSERT INTO `tabela3` VALUES (1,'10'),(2,'20'),(3,'30'),(4,'15'),(5,'17');






 

Instrução 

 

INSERT INTO bancoteste.tabela1 (nome, idade, data) SELECT tb2.nome, tb3.idade, NOW() FROM bancoteste.tabela2 AS tb2,  bancoteste.tabela3  AS tb3 WHERE tb2.idtabela3_fk =  tb3.idtabela3  AND tb2.idtabela3_fk = 3;

 

Consulta o nome da tabela 2 e a idade da tabela 3 e a hora é inserida manualmente ( nesse caso, hora atual) e depois inseri tudo na tabela 1 de acordo com a condição (WHERE)

 

Share this post


Link to post
Share on other sites
  • 0

Bacana, era isso que eu iria ver, se o campo era date ou datetime.

 

Beleza mano.

 

Até

  • +1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By manoaj
      Boa noite pessoal!
      Alguém ai entente dos checkouts do Mercado Pago pra me explicar como eu obtenho os dados da preferência criada através da url disponível na API
      https://api.mercadopago.com/checkout/preferences/:id?access_token=ACCESS_TOKEN_ENV  
    • By gersonab
      Bom dia, tenho um select onde gostaria de ordenar o mesmo pelo dia do campo date , segue o mesmo 
      $mesatual = date("m"); $consulta = $pdo->query("SELECT * FROM cli WHERE MONTH(datan) = '$mesatual' ORDER BY DAY(datan) ASC"); não esta ordenando o mesmo, teria de ser pelo dia, pois o mês vai ser sempre o atual e o ano varia conforme data de nascimento.
       
      exemplo de como esta aparecendo :
      18/07/2019
      14/07/2019
      preciso que seja assim :
      14/07/2019
      18/07/2019
    • By Igor Gabriel
      Boa Tarde, estou com uma dúvida.
       
      Estou criando um site para uma imobiliárias, fiz um sistema de cadastro todo bonitinho onde se encontra funcionando perfeitamente. Contudo fora do sistema, no site, quando clico para ver os imoveis, tenho a listagem de todos os imoveis já cadastrados. Quando entro na página para ver mais do Imóvel é trazido consigo todas as informações presentes no banco, ao invés de uma só. Como faço para trazer uma única informação específica do banco?
    • By leocouto
      Pegar um dado específico de uma tabela, caso tenha mais de um item cadastrado sempre vai pegar o último.
      <form name="editaFornecedor"<?php +1?> action="edit_forne.php" id="editaFornecedor" method="POST"> <!-- Pegando todos os fornecedores cadastrados... --> <table class="table table-striped"> <thead class="thead-dark"> <tr> <th scope="col">ID</th> <th scope="col">Nome</th> <th scope="col">Fone</th> <th scope="col">CNPJ</th> <th scope="col">Rua</th> <th scope="col">Número</th> <th scope="col">Bairro</th> <th scope="col">Estado</th> <th scope="col">Cidade</th> <th scope="col">CEP</th> <th scope="col">E-mail</th> <th scope="col">Observação</th> <th scope="col">Editar|Deletar</th> </tr> </thead> <?php @session_start(); include('conexao.php'); $fornecedor = mysqli_query($conexao, "SELECT * FROM fornecedor"); $linhas = mysqli_num_rows($fornecedor); while ($linhas = mysqli_fetch_array($fornecedor)) { ?> <tbody> <tr> <td><?php echo $linhas['id_fornecedor']; ?></td> <td><?php echo $linhas['nome']; ?></td> <td><?php echo $linhas['fone']; ?></td> <td><?php echo $linhas['cnpj']; ?></td> <td><?php echo $linhas['rua']; ?></td> <td><?php echo $linhas['numero']; ?></td> <td><?php echo $linhas['bairro']; ?></td> <td><?php echo $linhas['estado']; ?></td> <td><?php echo $linhas['cidade']; ?></td> <td><?php echo $linhas['cep']; ?></td> <td><?php echo $linhas['email']; ?></td> <td><?php echo $linhas['observacao']; ?></td> <td> <button type="submit" class="btn btn-secondary" style="height: 35px; width: 100px"><i class="material-icons">description</i>Editar</button><br> <button type="button" class="btn btn-danger" style="height: 35px; width: 100px"><i class="material-icons">delete</i>Deletar</button> </td> <td><input type="text" name="id_fornecedor" value="<?php echo $linhas['id_fornecedor'];?>"></td> </tr> </tbody> <?php } ?> </table> <!-- Fim da exibição de todos os fornecedores cadastrados.. --> </form>  
       
      ======================================================================================================================================================
      Aqui no MYSQL só pega o último item da tabela.. Não pega o que foi clicado no botão.
      <?php include('conexao.php'); session_start(); //$cnpj=$_POST['cnpj']; $id_fornecedor=$_POST['id_fornecedor']; echo $id_fornecedor; ?> =======================================================================================================================================================
      É desse modelo da imagem, mas na hora que clico em editar no mysql aparece o último id e não na linha que cliquei, se eu clicar no primeiro na outra página aparece o id 4, que é o ultimo, quem pode me dar essa força? Ficarei muito grato.

    • By Felipe_N22
      Pessoal, como que eu crio uma rotina no MySQL para efetuar delete de registros inseridos nos últimos 30 dias, e fazer com que esse procedimento rode todos os dias automaticamente em determinado horário?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.