Como parte de um projeto PHP, tenho que inserir uma linha no banco de dados MySQL. Obviamente, estou acostumado a fazer isso, mas isso exigia a inserção em 90 colunas em uma consulta. A consulta resultante parece horrível e monolítica (especialmente inserindo minhas variáveis PHP como os valores):
INSERT INTO mytable (column1, colum2, ..., column90)
VALUES
('value1', 'value2', ..., 'value90')
e estou preocupado que não vou fazer isso da maneira certa. Também me levou um longo tempo (chato) apenas para digitar tudo e testar a escrita do código de teste será igualmente entediante.
Como os profissionais escrevem e testam essas consultas rapidamente? Existe uma maneira de acelerar o processo?
php
mysql
efficiency
Joe
fonte
fonte
Respostas:
Joe, seu último comentário explicou muito. Eu acho que o verdadeiro problema é o design de dados. Novas colunas podem ser necessárias quando o formato do documento é alterado e, na minha experiência, os formatos de documento tendem a mudar com frequência. Em vez de uma tabela de 90 colunas, com uma única linha por relatório, eu armazenaria os dados do relatório em uma tabela com quatro colunas: report_id, format_id, field_name, field_value. Cada relatório seria representado por 90 linhas, uma para cada valor de campo no relatório. Isso deve simplificar consideravelmente seu código.
fonte
Em geral, a maneira mais rápida de carregar um grande conjunto de dados em um banco de dados SQL é usar a interface de carregamento em massa nativa. Até onde eu sei, todos os dbms SQL têm pelo menos um.
Documentos do MySQL: Usando o carregador em massa
Se eu tiver que transformar um arquivo delimitado por tabulação ou vírgula em instruções SQL INSERT, utilizarei o awk para ler o arquivo de entrada e gravar o arquivo de saída. Não há nada realmente especial no awk; por acaso é a linguagem de processamento de texto que eu conheço melhor. Você pode obter os mesmos resultados escrevendo código em Perl, Python, Ruby, Rexx, Lisp e assim por diante.
fonte
Se você pode facilmente inserir os nomes das colunas em uma planilha do Excel, você pode escrever macros do Excel para produzir código para várias consultas e instruções DML, basta colar valores em outra coluna e sua instrução de inserção / atualização é criada automaticamente para você. Digitar manualmente é uma maneira muito lenta de fazê-lo; portanto, veja se consegue encontrar truques usando as ferramentas existentes. Muitos editores de texto orientados ao desenvolvedor também têm a capacidade de gravar e armazenar macros para fazer trabalhos repetitivos como esse muito mais rápido e fácil.
fonte
Se você possui um arquivo csv, pode usar o LOAD DATA INFILE ... para importar os dados.
Se você precisar usar consultas 'INSERT', fazer inserções em massa acelerará o processo. Em vez de executar uma consulta 'INSERT' para cada linha, agrupe as linhas, diga 100 e execute a consulta. Algo assim:
fonte
Uma maneira eficiente de gravar dados de consulta com várias colunas no MySQL DB é convertê-los no formato JSON ou YAML e inseri-los como uma única unidade. Ele muda "escreve uma inserção em uma tabela com 90 colunas" em "escreve uma inserção em uma tabela com uma coluna".
Nessa abordagem, nem tudo precisa ser dividido em seus componentes básicos, e o dado único é armazenado em apenas uma coluna.
fonte
Com o MySQL você pode usar sintaxe alternativa para
insert
instruções:fonte
Seu cenário parece ser muito bom para uma solução NoSQL, pois a lista de atributos pode mudar a qualquer momento que o formato for alterado. Você já avaliou outras opções além do MySQL? Pesquise o DynamoDB / MongoDB / Cassandra - isso pode ser melhor.
fonte
Existe uma maneira mais eficiente de inserir dados no banco de dados usando php e mysql. Podemos usar LOAD COMMAND para inserir os dados. Ele insere dados notavelmente rápidos.
Para isso, crie um arquivo simples (por exemplo, usei o arquivo .csv) com seus dados usando a
fputcsv()
função Em seguida, insira os dados usando o comando LOAD. Sintaxe alguns que semelhante como abaixo:fonte
Tente o seguinte. Trabalhou para mim.
Os nomes dos formulários devem ser iguais aos nomes das colunas do banco de dados
Obtenha os valores abaixo:
Você primeiro precisará inserir um ID antes do loop foreach. você pode obter o próximo ID fazendo:
adicione 1 ao id e insira-o.
fonte