Mysql
 sql >> Database >  >> RDS >> Mysql

Confronta MySQL con CSV e trova le differenze

Un modo per farlo:

(Supponendo che tu sappia già come aprire un file ed eseguire una query.)

Per prima cosa leggi le righe dal tuo CSV e supponi che i dati manchino in 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'];
}

Quindi recupera le righe dalla tua query e riempi di conseguenza l'array che hai creato dal CSV.

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'];
    }
}

È possibile modificare l'ordine di questo ed elaborare prima i risultati della query. Entrambi gli ordini funzioneranno, purché tu esegua la logica di aggiornamento/inserimento con la seconda origine dati.

Puoi ksort($result); se vuoi che i valori uniti siano in ordine, allora emetti $result comunque devi.