Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vergleichen Sie MySQL mit CSV und finden Sie Unterschiede

Eine Möglichkeit, dies zu tun:

(Vorausgesetzt, Sie wissen bereits, wie man eine Datei öffnet und eine Abfrage ausführt.)

Lesen Sie zuerst Zeilen aus Ihrer CSV-Datei und gehen Sie davon aus, dass die Daten in SQL fehlen.

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

Rufen Sie dann Zeilen aus Ihrer Abfrage ab und füllen Sie das Array, das Sie aus der CSV-Datei erstellt haben, entsprechend aus.

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

Sie könnten die Reihenfolge ändern und zuerst die Abfrageergebnisse verarbeiten. Beide Reihenfolgen funktionieren, solange Sie die Update/Insert-Logik mit der zweiten Datenquelle durchführen.

Sie können ksort($result); Wenn Sie möchten, dass die zusammengeführten Werte in Ordnung sind, geben Sie $result aus wie auch immer Sie es brauchen.