Upload de arquivo CSV para lidar com a atualização de status e a inserção de novos registros

Enquanto trabalhava em um projeto, hospedado localmente, estou preso ao gerenciamento de uploads de CSV. Uma das tarefas exige que eu faça upload de dados diariamente com novas entradas ou status atualizado para as entradas existentes. Também há uma probabilidade de que algumas das entradas (existentes no banco de dados) não tenham status atualizado.

Declaração do problema;

Eu criei um recurso de upload de CSV que carrega o arquivo CSV para um local específico e importa as informações na tabela atribuída. Quero saber qual é a melhor maneira de verificar os registros do banco de dados ao fazer o upload do CSV.

Idealmente, deve funcionar da seguinte forma;

se a entrada não existir (INSERIR novos dados de base de entrada do arquivo CSV)se a entrada existir e tiver o status SAME como o novo arquivo CSV carregado (IGNORAR & fazer nada)se a entrada existir e tiver status DIFERENTE do que o novo arquivo CSV carregado (ATUALIZAR status conforme mencionado no arquivo CSV)Estrutura de arquivo do banco de dados / CSVtracking_id (incremento automático)odanumber (carregado por CSV e pode ter entradas duplicadas)conhecimento aéreo (enviado por CSV e UNIQUE)courierful (carregado por CSV e pode ter entradas duplicadas)delstatus (enviado por CSV e é o que é atualizado principalmente)data de entrega (carregado por CSV e atualizado a cada entrega)

Pelo exposto, delstatus é atualizado quase sempre (para entradas existentes) o novo CSV é carregado e, portanto, precisa ser verificado.

Presumo que podemos escolher 'carta de porte aéreo'para verificar se existe e, se existir, verifique se odelstatus é igual ao arquivo ou atualização CSV. Se 'airwaybill' não existir, um novo registro deverá ser adicionado ao banco de dados. Como isso me salvaria de inserir todos os registros no banco de dados desnecessariamente. Ou pode ser feito de uma maneira melhor (que ainda estou para explorar).

O que está acontecendo agora?

Consigo fazer o upload do conjunto completo de arquivos CSV, criando novas entradas no banco de dados através do código a seguir.

<?php 

if(isset($_POST['csv']))
{
$sqlname= 'localhost';
$username= 'root';
$table= 'tracking';
$password= '';
$db='aatrack';
$file=$_POST['csv'];
$cons= mysqli_connect("$sqlname", "$username","$password","$db") or die(mysql_error());

$result1=mysqli_query($cons,"select count(*) count from $table");
$r1=mysqli_fetch_array($result1);
$count1=(int)$r1['count'];


mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
        INTO TABLE '.$table.'
        FIELDS TERMINATED by \',\'
        LINES TERMINATED BY \'\n\'
        IGNORE 1 LINES
')or die(mysql_error());

$result2=mysqli_query($cons,"select count(*) count from $table");
$r2=mysqli_fetch_array($result2);
$count2=(int)$r2['count'];

$count=$count2-$count1;
if($count>0)
{
    header("location:success.php?id=$count");
}

}

?>

Você pode ajudar a orientar da melhor maneira possível para alcançar o mesmo. Entendo que isso pode ser feito primeiro carregando as informações em uma tabela temporária e comparando as mesmas antes que as entradas sejam atualizadas na tabela LIVE.

Sugira uma maneira ideal de obter os resultados.

Obrigado por ler até aqui.

Cumprimentos,

Amit Agnihotri

questionAnswers(2)

yourAnswerToTheQuestion