Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Compare MySQL com CSV e encontre diferenças


Uma maneira de fazer isso:

(Supondo que você já saiba como abrir um arquivo e executar uma consulta.)

Primeiro leia as linhas do seu CSV e suponha que os dados estão ausentes no SQL.
while (($row = fgetcsv($file)) !== FALSE) {
    $num = $row[0];  // or whatever CSV column the value you want is in
    $result[$num] = ['csv' => $num, 'sql' => '', 'status' => 'MISSING IN SQL'];
}

Em seguida, busque linhas de sua consulta e preencha a matriz que você criou a partir do CSV de acordo.
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $num = $row['EAN']; // or whatever your column is named
    if (isset($result[$num])) {
        // This has a value from the CSV, so update the array
        $result[$num]['sql'] = $num;
        $result[$num]['status'] = 'OK';
    } else {
        // This doesn't have a value from the CSV, so insert a new row
        $result[$num] = ['csv' => '', 'sql' => $num, 'status' => 'MISSING IN CSV'];
    }
}

Você pode alterar a ordem disso e processar os resultados da consulta primeiro. Qualquer ordem funcionará, desde que você faça a lógica de atualização/inserção com a segunda fonte de dados.

Você pode ksort($result); se você quiser que os valores mesclados estejam em ordem, então imprima $result no entanto você precisa.