Ir para conteúdo

POWERED BY:

Arquivado

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

Back-on

[Resolvido] Inserir vários registros em sequência

Recommended Posts

Galera, primeiramente olá!

Gostaria de saber de existe algum comando em mysql ou até mesmo em PHP para inserir uns registros de numeros sequênciados, de 1 à 1000 (exemplo).

 

Ou eu no caso, teria que fazer uma lógica com o while ou for?

 

Até mais, aguardo contato ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSERT INTO tabela(id) VALUES(1), (2), (3);

 

Ou eu no caso, teria que fazer uma lógica com o while ou for?

 

Use o loop para gerar a SQL no padrão acima.

Não execute a query dentro do loop, apenas monta a consulta no loop

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, muito obrigado, más não era exatamente isso que queria...

Más vou tentar fazer um loop com arrays e fazer a query, rs.

 

O que eu queria, é que registrasse automaticamente do 1 ao 1000. Não que precisa-se ficar colocando numero por numero. Más mesmo assim, obrigado pelo apoio ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu queria, é que registrasse automaticamente do 1 ao 1000. Não que precisa-se ficar colocando numero por numero. Más mesmo assim, obrigado pelo apoio ;)

 

eu entendi. por isso falei para montar o loop

o exemplo da SQL que mostrei foi só para ilustar como deve ser a string final. obviamente você não escreverá 1 a 1000 manualmente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... Mil desculpas ^^'

Vou correr atrás de uma lógica para montar esse loop, obrigado!

 

Não tive tempo de testar, mas vê se essa lógica funciona

<?php
//Os parâmetros são o nome da tabela em que se deseja salvar e o valor máximo que você quer
//no seu caso deve ser o valor 1000. Tenta ver se funciona
//não tive tempo de testar ainda.
function salva_registros($tabela,$maximo){
$query = "INSERT INTO '{$tabela}' VALUES ";

for($i=1;$i<=$maximo;$i++){
	$query .= "('{$i}'), ";
}

mysql_query($query);
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tive tempo de testar, mas vê se essa lógica funciona

<?php
//Os parâmetros são o nome da tabela em que se deseja salvar e o valor máximo que você quer
//no seu caso deve ser o valor 1000. Tenta ver se funciona
//não tive tempo de testar ainda.
function salva_registros($tabela,$maximo){
$query = "INSERT INTO '{$tabela}' VALUES ";

for($i=1;$i<=$maximo;$i++){
	$query .= "('{$i}'), ";
}

mysql_query($query);
}
?>

 

 

quase.. só tem que cuidar com a última vírgula, que não pode existir

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

quase.. só tem que cuidar com a última vírgula, que não pode existir

 

tem razão...vou consertar.

<?php
//Os parâmetros são o nome da tabela em que se deseja salvar e o valor máximo que você quer
//no seu caso deve ser o valor 1000. Tenta ver se funciona
//não tive tempo de testar ainda.
function salva_registros($tabela,$maximo){
$query = "INSERT INTO '{$tabela}' VALUES ";

for($i=1;$i<=$maximo;$i++){
          if($i == $maximo){
	$query .= "('{$i}')";
          }else{
          	$query .= "('{$i}'), ";
          }
}

mysql_query($query);
}
?>

 

Acho que agora funciona direito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

para ser sincero, eu faria de uma forma mais "feia", porém menos custosa para o processsador: um if dentro de um loop é caro, principalmente em loops garndes. Eu deixaria do jeito que estava antes e só retiraria o último caractere, que é a vírgula

 

É meio feio e tem cara de gambiarra, mas quando a intenção for otimizar ao máximo, seria a melhor solução

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

para ser sincero, eu faria de uma forma mais "feia", porém menos custosa para o processsador: um if dentro de um loop é caro, principalmente em loops garndes. Eu deixaria do jeito que estava antes e só retiraria o último caractere, que é a vírgula

 

É meio feio e tem cara de gambiarra, mas quando a intenção for otimizar ao máximo, seria a melhor solução

 

:thumbsup:

 

E se a gente fizer assim Beraldo, o que você acha:

 

<?php
//Os parâmetros são o nome da tabela em que se deseja salvar e o valor máximo que você quer
//no seu caso deve ser o valor 1000. Tenta ver se funciona
//não tive tempo de testar ainda.
function salva_registros($tabela,$maximo){
$query = "INSERT INTO '{$tabela}' VALUES ";

for($i=1;$i < $maximo;$i++){
             	$query .= "('{$i}'), ";
}
       $query .= "('{$maximo}')";

mysql_query($query);
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se a gente fizer assim Beraldo, o que você acha:

 

:no:

 

É meio feio e tem cara de gambiarra, mas quando a intenção for otimizar ao máximo, seria a melhor solução

 

<_<

 

<?php
$valores = range( 1 , 100 );
$sql = sprintf( 'INSERT INTO Tabela(`valor`) VALUES (%s);' , implode( '),(' , $valores ) );

echo $sql;

 

Saída:

INSERT INTO Tabela(`valor`) VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),(30),(31),(32),(33),(34),(35),(36),(37),(38),(39),(40),(41),(42),(43),(44),(45),(46),(47),(48),(49),(50),(51),(52),(53),(54),(55),(56),(57),(58),(59),(60),(61),(62),(63),(64),(65),(66),(67),(68),(69),(70),(71),(72),(73),(74),(75),(76),(77),(78),(79),(80),(81),(82),(83),(84),(85),(86),(87),(88),(89),(90),(91),(92),(93),(94),(95),(96),(97),(98),(99),(100);

 

:lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa, João!!

 

O implode é outra boa solução! :D

 

 

PHP e seus truquezinhos... :P

 

Eu tinha me esquecido completamente do implode hahahahaha Boa mesmo joão, só tem que mudar os valores para irem até 1000. :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu um dia precisei fazer algo do tipo, e fiz algo parecido com o abaixo:

 

<?php

$sql = "INSERT INTO tablela(`valor`) VALUES ";
foreach(range(1, 99) as $numero) {  
   $sql .= "($numero), ";
}
$sql .= "(100);";
?>

 

Iria retornar:

 

INSERT INTO tablela(`valor`) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16), (17), (18), (19), (20), (21), (22), (23), (24), (25), (26), (27), (28), (29), (30), (31), (32), (33), (34), (35), (36), (37), (38), (39), (40), (41), (42), (43), (44), (45), (46), (47), (48), (49), (50), (51), (52), (53), (54), (55), (56), (57), (58), (59), (60), (61), (62), (63), (64), (65), (66), (67), (68), (69), (70), (71), (72), (73), (74), (75), (76), (77), (78), (79), (80), (81), (82), (83), (84), (85), (86), (87), (88), (89), (90), (91), (92), (93), (94), (95), (96), (97), (98), (99), (100);

 

Esse código é pior que o implode?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Esse código é pior que o implode?

 

É, porque ele vai fazer um laço com 99 repetições, enquanto que o implode vai executar uma função.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
// Usando o loop
$time = microtime( true );

for ( $i = 0 ; $i < 100000 ; ++$i ){
	$sql = "INSERT INTO tablela(`valor`) VALUES ";
	foreach(range(1, 99) as $numero) {
	$sql .= "($numero), ";
	}
	$sql .= "(100);";
}

var_dump( microtime( true ) - $time );

// Usando implode

$time = microtime( true );

for ( $i = 0 ; $i < 100000 ; ++$i ){
	$valores = range( 1 , 100 );
	$sql = sprintf( 'INSERT INTO Tabela(`valor`) VALUES (%s);' , implode( '),(' , $valores ) );
}

var_dump( microtime( true ) - $time );

 

Saída:

[neto@localhost src]$ php teste.php 
float(6.8272881507874)
float(2.8214619159698)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Saída:

[neto@localhost src]$ php teste.php 
float(6.8272881507874)
float(2.8214619159698)

 

Que estranho...

 

Fiz algo parecido e deu um resultado diferente...

 

<?php

// usando implode

$start = microtime(true);

$valores = range( 1 , 100 );
$sql = sprintf( 'INSERT INTO Tabela(`valor`) VALUES (%s);' , implode( '),(' , $valores ) );

$tempo = microtime(true) - $start;

// usando loop

$start = microtime(true);

$sql = "INSERT INTO tablela(`valor`) VALUES ";
foreach(range(1, 99) as $numero) {  
   $sql .= "($numero),";
}
$sql .= "(100);";

$tempoa = microtime(true) - $start;

echo "$tempo <br>$tempoa";
?>

 

Saída:

0.011538028717041
0.0014548301696777

 

Onde o primeiro número é o tempo em segundos que levou para o script do implode finalizar e o segundos é o do loop... que será que acontece? :huh: :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é o tempo de processamento em ms.

No exemplo do Neto foi utilizado um loop com 100000 voltas para que a diferença de processamento pudesse ser vista com maior facilidade. No seu script, você utilizou um laço com 100 voltas, que obviamente precisa de um processamento muito menor para ser executado.

 

Além disso o processamento não é estático e depende da configuração do servidor, bem como as aplicações sendo utilizadas paralelamente no momento do teste.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, valeu pelas dicas galera! Eu inventei de uma forma com POG (programação orientada à gambiarras).

Más tudo de esclareceu agora ;)

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.