Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estou tentano fazer uma consulta ao BD para montar uma query [inline]INSERT INTO[/inline] com o resultado da consulta. A parte que gera o nome dos campos eu consegui fazer. Agora preciso de ajuda para gerar o [inline]VALUES[/inline]. Vejam: <?php
$sql = "SELECT estado,cidade, COUNT(*) AS total FROM tabela GROUP BY estado,cidade". $rs = mysql_query ($sql) OR die (mysql_error()). $total = mysql_num_rows ($rs). // Listar campos da tabela
$campos = array(). for($i=0, $total=mysql_num_fields($rs). $i<$total. $i++){ $campos[] = mysql_field_name($rs, $i). } $campos_str = implode (",",$campos). $sql_insert = "INSERT INTO novaTabela (".$campos_str.") VALUES". // Monta a parte VALUES
$sql_insert.= " ('1', '2', '3')". $rs = mysql_query($sql_insert) OR die (mysql_error()).?> O código acima me retorna: INSERT INTO novaTabela (estado,cidade,total) VALUES ('1', '2', '3') A minha dúvida está em como gerar a parte que vem depois de [inline]VALUES[/inline]Você pode exemplificar? Obrigado.
Não sei se é a melhor maneira mas consegui montar a segunda parte da consulta assim:
$sql_insert = "INSERT INTO ddqod (".$campos_str.") VALUES";
$dados[$campos] = array();
while($dados = mysql_fetch_assoc($rs)){
$estado = $dados['estado'];
$didade = $dados['cidade'];
$total = $dados['total'];
$sql_insert .= " ('{$estado}','{$cidade}','{$total}'),";
}
$sql_insert = substr($sql_insert, 0, -1);// Remove a última vírgula
$rs = mysql_query($sql_insert) OR die (mysql_error());
Acho que esse tópico deveria ter o nome editado, é possível?
Amigo não sei qual a finalidade no caso de se fazer multiplas consultas mais primeiro as função mysql_* estão obsoletas, use mysqli ou PDO.
No caso com mysqli tem uma função para fazer multiplas consultas mysqli_multi_query.
<?php
$SQL = "SELECT `estado`, `cidade`, COUNT(1) AS `total` FORM `tabela` GROUP BY `estado`, `cidade`";
$Query = mysql_query($SQL) or die(mysql_error());
$Total = mysql_result($Query, 0, 'total');
// Inserir novos dados em outra tabela
while ($Dados = mysql_fetch_array($Query)) {
$QuerySQL = mysql_query("INSERT INTO `novaTabela` VALUES (NULL, '".$Dados['estado']."', '".$Dados['cidade']."')") or die(mysql_error());
}
?>>
Amigo não sei qual a finalidade no caso de se fazer multiplas consultas mais primeiro as função mysql_* estão obsoletas, use mysqli ou PDO.
No caso com mysqli tem uma função para fazer multiplas consultas mysqli_multi_query.
Eu nem aprendi as funções mysql_* e já estão absoletas!? kkkkkk, é muito difícil! Talvez tenha me expressado de forma incompreensível, mas o que eu quero é fazer uma consulta em uma tabela e pegar o resultado e inserir em uma outra tabela entende? De qualquer forma obrigado pelas dicas para usar mysqli ou PDO, vou pesquisar sobre o assunto.
mas o que eu quero é fazer uma consulta em uma tabela e pegar o resultado e inserir em uma outra tabela entende?
use insert com select
INSERT INTO tabela (campo1, campo2, campo3) SELECT c1, c2, c3 FROM outra_tabela WHERE......em vez de remover a última vírgula, não seria mais fácil pegar o array e implodir em vírgulas?
$campos[0]="`estado`";
$campos[1]="`cidade`";
$campos[2]="`total`";
$sql = "INSERT INTO `ddqod` (".implode(",",$campos).") VALUES ( '".implode("','",$dados)."')";>
em vez de remover a última vírgula, não seria mais fácil pegar o array e implodir em vírgulas?
Mas pra inserir vários registros não tem que ter as vírgulas separando cada linha? (...),(...),(...)
>
<?php
$SQL = "SELECT `estado`, `cidade`, COUNT(1) AS `total` FORM `tabela` GROUP BY `estado`, `cidade`";
$Query = mysql_query($SQL) or die(mysql_error());
$Total = mysql_result($Query, 0, 'total');
// Inserir novos dados em outra tabela
while ($Dados = mysql_fetch_array($Query)) {
$QuerySQL = mysql_query("INSERT INTO `novaTabela` VALUES (NULL, '".$Dados['estado']."', '".$Dados['cidade']."')") or die(mysql_error());
}
?>Caso for preciso, você editar a $QuerySQL para a necessidade da sua tabela...
Eu achei que estava abafando e você mandou bem com seu código simples e funcional. Não sabia que poderia inserir dados omitindo os nomes das colunas e colocando apenas os valores no comando. Obrigado a todos. Pra mim está resolvido.
O certo seria você marcar o meu post como resolvido, mas tudo bem...
Me desculpe, estou acostumado com outros fóruns e não sabia que isso interferia... Aproveitando, onde eu encontro a FAQ desse fórum? Estou precisando ler as regras do fórum. Obrigado.
Eu te sugiro você fazer as duas coisas com um loop while, um dentro do outro, faço isto bastante.