Ir para conteúdo

Arquivado

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

pemoamsi

ciclo de inserts

Recommended Posts

Boa tarde, estou a correr um ciclo em que o número do array é que possui os valores alguns dos valores a ser adicionados, e precisava de uma ajuda para construir um ciclo.

 

O ciclo que tenho de momento corre o array bidimensional e insere os dados:

 

        for ($l = 1; $l <= $maxID; $l++)
        {
            for ($m = 1; $m <= $maxID; $m++)
            {
                if($insert[$l][$m] != "")
                {
                    echo $l . " - " . $insert[$l][$m] . " - " . $m . "<br>";
                    $add = $q->query('INSERT INTO classe (id, nome, disciplina_id, aula_id)
                                  VALUES ("' . $l . '", "'.$nome.'", "' . $nova_disciplina_id . '", "'.$m.'");');  

                }
            }
        }

 

O meu problema é a lentidão deste processo quando existem demasiados dados na base de dados, logo pretendia fazer o ciclo primeiro para contruir uma query e depois inserir de uma vez, mas não estou a ver como dar a volta à questão...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá meu amigo.

 

Não entendi sua dúvida.

Sua dúvida e para construir a query e executar a mesma ou apenas queria a informação do motivo de lentidão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acredito que a lentidão vem do facto de fazer vários inserts, em vez de, num unico momento, inserir todos os dados na base de dados.

 

O que eu pretendia era uma sugestão de um método para que eu possa inserir tudo de uma vez

 

INSERT INTO xpto (val 1, val 2, val 3)

VALUES

(1,2,3),

(2,3,4),

(3,4,5)

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quantos dados vc vai inserir ? (sugiro particionar em queries de no máximo 100 linhas cada).

 

Uma forma de fazer, sem saber se os teus loops estão corretos, é:

$arr = Array();
        for ($l = 1; $l <= $maxID; $l++)
        {
            for ($m = 1; $m <= $maxID; $m++)
            {
                if($insert[$l][$m] != "")
                {
                    echo $l . " - " . $insert[$l][$m] . " - " . $m . "<br>";
                    $arr[] = '("' . $l . '", "'.$nome.'", "' . $nova_disciplina_id . '", "'.$m.'")';

                }
            }
        }
$values = implode(',', $arr);
$add = $q->query('INSERT INTO classe (id, nome, disciplina_id, aula_id) VALUES '. $values);  

assim vc vai inserir tudo em uma só query.

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.