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 maruoppolo
      Olá, tenho 2 tabelas:
       
      tb_dados: ID - MUSICA
       
      tb_votos: ID - VOTO - RADIO - MUSICA
       
      Preciso fazer uma query que traga as musicas da tb_dados porém ordenando pelo número de votos que ela teve na tb_votos.
       
      Então assim, existem 2 tipos de voto 1 = like e 2 = dislike, cada ver que um usuário vota eu pego qual radio que ele esta ouvindo e salvo no campo radio, o id da musica na tb_dados e salvo no campo musica da tb_votos e coloco o número 1 para like e 2 para dislike no campo voto.
       
      A query precisa contar quantos likes teve na tv_votos filtrando por radio e mostrando os resultados em ordem decrescente as musicas com mais likes.
       
      A ideia é trazer as 10 musicas com mais like de cada radio
       
      Alguma ideia de como fazer?? Estou enroscado nisso a dias.
    • By Chester1
      oi, eu to tentando mexer com servidores agora no PHP e esta dando um erro muito estranho que quando eu procuro em um programa que acha erros de sintaxe ele me diz que o erro esta no </HTML>    se alguem puder me dizer qual foi o erro que eu cometi eu agradeceria
       

       
      <HTML> <HEAD><TITLE>incluindo no banco de dados</TITLE></HEAD> <body> <BODY bgcolor="#d0d0d0"> <center> <h3>Lanchonete coma bem (voltada para o internauta)</h3> <h1>24horas</h1> <?php $login_digitado=$_POST['login']; $senha=$_POST['senha']; $nome=$_POST['nome']; $email=$_POST['email']; $telefone=$_POST['telefone']; $celular=$_POST['celular']; $endereco=$_POST['endereco']; $complemento=$_POST['complemento']; if ($login_digitado == "" || $senha == "" || $nome =="" || $email == "" || $telefone == "" || $endereco == "" || $complemento == "") { echo "existem(m) campos(s) de preenchimento obrigatorio em branco,<BR> infelizmente tera que voltar para preenche-lo(s)."; echo "<BR><a href=\"cadastro.php\">clique aqui para tentar novamente</a>"; } else { { $link=mysql_connect("localhost", "root", "") or die ("<h1>nao foi possivel conectar !!!</h1> ".mysql_error());  
      obs :estou trabalhando com formularios e servidores
         
         
         
         
      ?>
      </BODY>
      </HTML>
    • By rainbowily
      Sou nova em sql e estou com duvida em como fazer uma consulta:
      Eu tenho uma tabela de produto(id, descricao), cor(id, nome) e produto_cor(id, id_produto, id_cor). Preciso descobrir se tem algum produto que tenhas as cores (1,2,3) respectivamente para não deixar cadastrar outro produto. Alguém poderia me ajudar? Obrigada



    • By DavidPin94
      Boa tarde, estou tentando criar uma validação para saber se o usuário já está cadastrado no meu banco de dados para meu sistema ficar mais organizado, porém quando realizo o teste cadastrando um usuário já cadastrado, o cadastro ocorre sendo que não era para ocorrer
      <?php require_once("conexao.php");?> <?php if (isset($_POST['usuario'])) { $nome = utf8_decode($_POST['usuario']); $senha = utf8_decode($_POST['senha']); $inserir = "INSERT INTO cadastro "; $inserir .= "(usuario, senha) "; $inserir .= "VALUES "; $inserir .= "('$nome', '$senha')"; $query = "SELECT usuario FROM cadastro WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); $query = "SELECT usuario FROM clientes WHERE usuario = '$usuario' LIMIT 1"; $consulta = mysqli_query($conecta, $query); if (mysqli_num_rows($consulta) < 1) { $operacao_inserir = mysqli_query($conecta, $inserir); if (! $operacao_inserir) { die("Erro no banco"); }else header("location: login.php"); }else{ die("Usuário existente!"); } } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Cadastrar novo usuário</title> <link rel="stylesheet" type="text/css" href="estilo.css"> </head> <body> <nav> <ul> <li><a href="inicial.php">PÁGINA INICIAL</a></li> <li><a href="quem_somos.php">QUEM SOMOS</a></li> </ul> </nav> <div id="cadastro"> <form method="post" action="cadastro.php"> <label>Digite seu nome de usuário</label> <input type="text" name="usuario" placeholder="Ex: Usuario123" required size="50" minlength="5" maxlength="20" autofocus><br> <label>Digite sua senha</label> <input type="password" name="senha" placeholder="Deve conter mais de 5 caracteres" required size="50" minlength="5" maxlength="20" autofocus><br> <input type="submit" value="Cadastrar" id="enviar" name="enviar"> </form> </div> </body> </html> ,  alguém poderia me ajudar?  Meu código:
    • By thunanchiu@hotmail,com
      Bom dia, gostaria dessa ajuda.
      Tenho uma tabela de "INSCRIÇÃO" onde a mesma possui 2 chaves estrangeiras (CAND_SQ e CANDPL_SQ). Ambas as chaves estrangeiras possuem um campo CPF.
      Gostaria de saber como eu trago os cpfs que são iguais dentro da inscrição.
      Ou seja, atualmente tenho uma INSCRIÇÃO onde pode ser feita de duas maneiras diferentes. Inscrição Regular e Inscrição Atraso. Quando eu for fazer a Inscrição Atraso, caso eu já tenha feito a Inscrição Regular não poderei fazer a Inscrição Atraso.
×

Important Information

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