Back-on 14 Denunciar post Postado Dezembro 21, 2010 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
Beraldo 864 Denunciar post Postado Dezembro 21, 2010 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
Back-on 14 Denunciar post Postado Dezembro 22, 2010 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
Beraldo 864 Denunciar post Postado Dezembro 22, 2010 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
Back-on 14 Denunciar post Postado Dezembro 22, 2010 Então... Mil desculpas ^^' Vou correr atrás de uma lógica para montar esse loop, obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Cruz Rocha 0 Denunciar post Postado Dezembro 22, 2010 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
Beraldo 864 Denunciar post Postado Dezembro 22, 2010 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
Matheus Cruz Rocha 0 Denunciar post Postado Dezembro 23, 2010 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
Beraldo 864 Denunciar post Postado Dezembro 23, 2010 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
Matheus Cruz Rocha 0 Denunciar post Postado Dezembro 23, 2010 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
João Batista Neto 448 Denunciar post Postado Dezembro 23, 2010 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
Beraldo 864 Denunciar post Postado Dezembro 23, 2010 Boa, João!! O implode é outra boa solução! :D PHP e seus truquezinhos... :P Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Cruz Rocha 0 Denunciar post Postado Dezembro 23, 2010 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
Marcos Knijnik 0 Denunciar post Postado Dezembro 23, 2010 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
Matias Rezende 50 Denunciar post Postado Dezembro 23, 2010 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
João Batista Neto 448 Denunciar post Postado Dezembro 23, 2010 <?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
Marcos Knijnik 0 Denunciar post Postado Dezembro 23, 2010 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
Matheus Tavares 167 Denunciar post Postado Dezembro 23, 2010 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
Back-on 14 Denunciar post Postado Dezembro 23, 2010 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