Olá a todos. Tenho uma dúvida no seguinte. Tenho uma tabela de produtos e uma tabela de tamanhos referente a esses produtos. Na tabela de produtos eu tenho um ID que é auto incrementado. Mas precisava gerar os registros de tamanhos referentes a esse produto e usaria esse ID do produto como chave estrangeira. Eu gostaria de cadastrar o produto e gerar um novo ID e gerar o registro na tabela de tamanhos referentes a esse ID. Mas até a inserção na tabela de tamanhos eu ainda não tenho o número do ID gerado do produto. Alguém tem uma solução ou sugestão simples para fazer isso?
[RESOLVIDO] Dúvidas na inserção de registros em duas tabelas
5 Respostas
Olá Bruno, isso é simples de se fazer. está fazendo com java ? se sim a própria lib JDBC tem um método de recuperar o ID inserido numa tabela(você tem que passar um parâmetro para o statement) da uma pesquisada no google sobre isso que acha bem fácil, isso é o de menos.
No teu DAO(classe que você inseri na tabela produto) depois de inserir recupera o valor do ID e simplismente pega esse valor e insira na outra tabela com outro statement(outra query de insert).
Ficaria mais ou menos assim:
public void inserir(){
String queryProduto = "suaquery";
PreparedStatement ps = conn.prepareStatement(queryProduto, Statement.RETURN_GENERATED_KEYS);
Long id = null;
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) {
id = rs.getInt(1);
}
if(id != null){
//insira na outra tabela
}
}
Mais ou menos isso dai.
Estou vendo agora que você marcou PHP, a lógica é a mesma, vai usar a lib do php(não sei qual é…kk)
Na verdade eu já estou tentando resolver da seguinte forma:
O problema que consigo gerar o sql dos tamanhos mas ele não insere na tabela. Insere somente o produto principal com o id certinho. Mas a do tamanho não insere.
Se eu copiar a sql que imprimo e executar direto no banco da certinho. Mas pelo php só gera o retorno de “Erro grade”.
if(insereProduto($conexao,$produto)){ $id = localizaIdProduto($conexao); if(insereGradeProduto($conexao,$id,$_POST[“min”],$_POST[“max”])){ echo “Sucesso grade.”; }else{ echo “Erro grade.”; } $_SESSION[“success”]=“Produto cadastrado com sucesso”; }else{ $_SESSION[“danger”]=“Erro ao cadastrar produto”; } function localizaIdProduto($conexao){ $query = “SELECT MAX(id) id from PRODUTOS”; $consulta = mysqli_query($conexao,$query); $resultado = mysqli_fetch_assoc($consulta); return $resultado[‘id’]; } function insereGradeProduto($conexao,$id,$min,$max){ $query = “”; for($i=$min;$i<=$max;$i++){ $query.=“INSERT INTO PRODUTOS_GRADE (id,tamanho) VALUES ({$id},{$i});”; } echo $query; return mysqli_query($conexao, $query); }
Opa. Já encontrei a solução.
Mudei a sql pra ser uma só. Parece que que não executa várias querys de uma vez só. Desculpem a abrição de tópicos. Mas eu pergunto quando não consigo pensar mais, mas vou pelejando até dar certo. Obrigado a todos. Só pra constar a minha solução:
function insereGradeProduto($conexao,$id,$min,$max){
$query="";
$query.="INSERT INTO PRODUTOS_GRADE (id,tamanho) VALUES";
for($i=$min;$i<$max;$i++){
$query.="({$id},{$i}),";
}
$query.="({$id},{$i});";
return mysqli_query($conexao,$query);
}
Quanto ao tratamento de exceções falta mesmo. Sou iniciante no PHP e preciso colocar isso mesmo. Mas desde já agradeço.