Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

hamiltonssj4

Insert com Select

Recommended Posts

Olá. Estou criando uma página html, com uma base dados (MySQL), porem não consigo inserir mais de um dado no banco de dados. Descobri que teria que fazer um Insert into com Select.

 

Meu código:

"INSERT INTO cliente (nomecliente, sexo, datanasc, naturalidade, endereco, bairro, municipio, uf, telefone, descrestadocivil)
SELECT codestadocivil,descrestadocivil
FROM estadocivil";
Erro no MySQL:
#1136 - Column count doesn't match value count at row 1
Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para cada campo do Insert deve ter um campo correspondente no select.

 

Tipo e tamanho também são importantes.

 

Além do que está inserindo em CLINTE e lendo ESTADO_CIVIL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para cada campo do Insert deve ter um campo correspondente no select.

 

Tipo e tamanho também são importantes.

 

Além do que está inserindo em CLINTE e lendo ESTADO_CIVIL.

 

Mas a tabela Estado Civil, só há dois campos (cod e a descrição). Não há mais campos. Haverá mais tabelas, aí coloco tudo junto?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Sim, no resultado do SELECT deve haver somente as informações correspondentes a cada campo. Por exemplo:
INSERT INTO cliente (nomecliente, sexo, datanasc, naturalidade, endereco, bairro, municipio, uf, telefone, descrestadocivil)
SELECT 'lokaodomau','m','2014-09-09','cidade','Rua de teste,'bairro teste','municipio','uf',999999999,descrestadocivil
FROM estadocivil
WHERE descrestadocivil = 'solteiro(a)'

Não sei como este cadastro é realizado, mas inseri meu nick como nome, sexo, data de nascimento, da mesma forma como se estivesse fazendo um INSERT normal, mas sem o VALUES (...,...), e no último campo, coloquei o que encontrei no SELECT filtrando "descrestadocivil = 'solteiro(a)'".

 

Espero que tenha entendido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, no resultado do SELECT deve haver somente as informações correspondentes a cada campo. Por exemplo:
INSERT INTO cliente (nomecliente, ---o, datanasc, naturalidade, endereco, bairro, municipio, uf, telefone, descrestadocivil)
SELECT 'lokaodomau','m','2014-09-09','cidade','Rua de teste,'bairro teste','municipio','uf',999999999,descrestadocivil
FROM estadocivil
WHERE descrestadocivil = 'solteiro(a)'

Não sei como este cadastro é realizado, mas inseri meu nick como nome, ---o, data de nascimento, da mesma forma como se estivesse fazendo um INSERT normal, mas sem o VALUES (...,...), e no último campo, coloquei o que encontrei no SELECT filtrando "descrestadocivil = 'solteiro(a)'".

 

Espero que tenha entendido.

 

Há um radio button com diferentes "estado civil" (solteiro, casado, viúvo, separado...), então vou vet quer fazer um select para cada opção?

Igual a isso:

 

SELECT 'lokaodomau','m','2014-09-09','cidade','Rua de teste,'bairro teste','municipio','uf',999999999,descrestadocivil

FROM estadocivil

WHERE descrestadocivil = 'casado(a)'

 

ou

 

SELECT 'lokaodomau','m','2014-09-09','cidade','Rua de teste,'bairro teste','municipio','uf',999999999,descrestadocivil

FROM estadocivil

WHERE descrestadocivil = 'viuvo(a)'

 

Assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, pra isso serve o PHP, que é dinâmico o suficiente para fazer uma única consulta SQL servir para todas as situações do estado civil.

 

Mas o INSERT SELECT tem suas restrições, geralmente eu uso um INSERT SELECT para tratar as informações externas, pois carrego a informação externa em uma tabela temporária, e faço o tratamento pelo SELECT:

INSERT INTO tabela_definitiva (desc_servico, reparador, observacao)
SELECT
  s.id AS desc_servico,
  t.reparador AS reparador,
  t.observacao AS observacao
FROM tabela_temporaria AS t
LEFT JOIN servicos AS s ON s.descricao = t.desc_servico

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, pra isso serve o PHP, que é dinâmico o suficiente para fazer uma única consulta SQL servir para todas as situações do estado civil.

 

Mas o INSERT SELECT tem suas restrições, geralmente eu uso um INSERT SELECT para tratar as informações externas, pois carrego a informação externa em uma tabela temporária, e faço o tratamento pelo SELECT:

INSERT INTO tabela_definitiva (desc_servico, reparador, observacao)
SELECT
  s.id AS desc_servico,
  t.reparador AS reparador,
  t.observacao AS observacao
FROM tabela_temporaria AS t
LEFT JOIN servicos AS s ON s.descricao = t.desc_servico

Então, como faço para que uma única consulta SQL servir para todas as situações do estado civil?

No formulário html+php há vários radio button, troco tudo por combo box's?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É só um exemplo.

 

pagina_formulario.php:

<form name="formulario_teste" method="post" action="pagina_tratamento.php">
<label>Estado civil:</label>
<input type="radio" name="estado_civil" value="solteiro" id="estado_civil_solteiro"><label for="estado_civil_solteiro">Solteiro(a)</label>
<input type="radio" name="estado_civil" value="casado" id="estado_civil_casado"><label for="estado_civil_casado">Casado(a)</label>
<input type="radio" name="estado_civil" value="viuvo" id="estado_civil_viuvo"><label for="estado_civil_viuvo">Viuvo(a)</label>
</form>

pagina_tratamento.php:

<?php

$estado_civil = $_POST['estado_civil'];

$sql = "SELECT codestadocivil, descestadocivil FROM estadocivil WHERE estado_civil = '" . $estado_civil . "'";
echo '<p>Veja como ficou a consulta SQL:</p><p>' , $sql , '</p>';

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais lokaodomau, você deu um exemplo para um radio button, como faço para diversos na mesma página mais um formulário do tipo cadastro de clientes?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpe, não mexo muito com a linguagem WEB, o pouco que sei é o que utilizei para desenvolver algumas páginas internas, de pouco acesso, sem muito tratamento de variáveis. Basicamente trabalho com o MySQL pelo Navicat, hehe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me desculpe, não mexo muito com a linguagem WEB, o pouco que sei é o que utilizei para desenvolver algumas páginas internas, de pouco acesso, sem muito tratamento de variáveis. Basicamente trabalho com o MySQL pelo Navicat, hehe.

Mas no seu exemplo que você deu, posso por na página para cada radio button e depois lincá-los com o banco de dados?

 

Olha como está uma parte do código:

 

<html>
<head>
<title>Anamnese Saúde Mental</title>
</head>
<body>
<center><h1><font size="4">Anamnese Saúde Mental – Ficha de Inscrição - Adulto</font></h1></center>
<form method="POST" action = "resposta.php">
Data: <input type="textbox" name="data"><br/>
<br/>
<p align=”Left”><h3><font size="3">I - Identificação:</font></h3></p>
Nome:
<input name="nome" type="text" value="" size=30 maxlength=30><br />
Sexo:
<input type="radio" name="sexo" value="M">Masculino
<input type="radio" name="sexo" value="F">Feminino<br />
Data de nascimento:
<input type="textbox" name="datanasc" size=6 maxlength=10><br />
Naturalidade:
<input type="textbox" name="naturalidade" size=10 maxlength=20><br />
Endereço:
<input type="textbox" name="endereco" size=30 maxlength=30><br />
Bairro:
<input type="textbox" name="bairro" size=10 maxlength=20><br />
Município:
<input type="textbox" name="municipio" size=10 maxlength=20><br />
UF:
<input type="textbox" name="uf" size=1 maxlength=2><br />
Telefone(s):
<input type="textbox" name="telefone"size=10 maxlength=13><br />
<p align=”Left”><h3><font size="3">II – Dados Clínicos:</font></h3></p>
Estado Civil:
<p>
<input type="radio" name="civil" value="solteiro"> Solteiro<br />
<input type="radio" name="civil" value="casado"> Casado<br />
<input type="radio" name="civil" value="união"> União Consensual<br />
<input type="radio" name="civil" value="separado"> Separado ou Divorciado<br>
<input type="radio" name="civil" value="viuvo"> Viúvo<br />
<input type="radio" name="civil" value="seminformacao"> Sem Informação<br />
<input type="radio" name="civil" value="outros" onclick="document.getElementById('outros').style.display='block'"/> Outros
<div id="outros" style="display:none;">
<input type="text" name="cmp1" size="25" maxlength="20"/></div>
Escolaridade:
<p>
<input type="radio" name="escolaridade" value="analfabeto"> Analfabeto<br />
<input type="radio" name="escolaridade" value="casado"> Apenas Escreve o Nome<br />
<input type="radio" name="escolaridade" value="união"> 1º Incompleto<br />
<input type="radio" name="escolaridade" value="separado"> 1º Completo<br>
<input type="radio" name="escolaridade" value="viuvo"> 2º Incompleto<br />
<input type="radio" name="escolaridade" value="seminformacao"> 2º Completo<br />
<input type="radio" name="escolaridade" value="seminformacao"> 2º Completo Técnico ou Profissionalizante Completo<br />
<input type="radio" name="escolaridade" value="viuvo"> Superior Incompleto<br />
<input type="radio" name="escolaridade" value="viuvo"> Superior Completo<br />
<input type="radio" name="escolaridade" value="viuvo"> Sem Informação<br />
<p>
Profissão:<input name="profissao" type="text" value="" maxlength=20><br />
Exerce alguma atividade remunerada no momento?
<input name="ativo" type="radio" class="form_1" value="N" onclick="if(document.getElementById('titulo').disabled==false){document.getElementById('titulo').disabled=true}"/>Não
<input name="ativo" type="radio" class="form_1" value="S" onclick="if(document.getElementById('titulo').disabled==true){document.getElementById('titulo').disabled=false}"/>Sim.
Qual?<input name="titulo" id="titulo" type="text" size="25" maxlength="40" disabled="disabled" />
<p>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, basta tratar cada variável.

 

PS: Gostei do valor do radio para escolaridade, sauhsuahs.

<input type="radio" name="escolaridade" value="viuvo"> Superior Incompleto<br />
<input type="radio" name="escolaridade" value="viuvo"> Superior Completo<br />
<input type="radio" name="escolaridade" value="viuvo"> Sem Informação<br />

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Sim, basta tratar cada variável.

 

PS: Gostei do valor do radio para escolaridade, sauhsuahs.

<input type="radio" name="escolaridade" value="viuvo"> Superior Incompleto<br />
<input type="radio" name="escolaridade" value="viuvo"> Superior Completo<br />
<input type="radio" name="escolaridade" value="viuvo"> Sem Informação<br />

Kkkkkkkkkkkkkkkkkkk. iiiii. Vou corrigir.

Outra dúvida. Você viu que há formulário com nome, endereço. etc., e os radio button. Agora como eu link tudo, como faço para em apenas uma consulta, cadastro todos os dados do cliente?

O meu código para o formulário de cima foi esse:

 

"INSERT INTO cliente (nomecliente, ---o, datanasc, naturalidade, endereco, bairro, municipio, uf, telefone, descrestadocivil) VALUES ('".$_POST['nome']."', '".$_POST['---o']."', '".$_POST['datanasc']."', '".$_POST['naturalidade']."', '".$_POST['endereco']."', '".$_POST['bairro']."', '".$_POST['municipio']."', '".$_POST['uf']."', '".$_POST['telefone']."')";

 

Esta cadastrando no banco de dados. Agora vem os radio button. Como coloco tudo isso em uma única consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

lokaodomau, não esta gravando no banco de dados, e quando jogo no banco de dados a consulta, olha o que dá:

 

#1054 - Unknown column 'descestadocivil' in 'field list'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um SELECT para retornar todos os registros do estado civil e printar no formulario ("SELECT codestadocivil, descestadocivil FROM estadocivil"), aí pelo PHP você joga cada resultado dentro de uma tag OPTION onde value é o valor que vai passar para o banco (codestadocivil ou descestadocivil), e quando a pessoa selecionar e enviar o formulário, este campo já vai preenchido.

 

Este erro ocorreu porque você não informou o valor deste campo, como foi citado anteriormente, todos os campos devem ser preenchidos para realizar o INSERT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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