Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comparez MySQL avec CSV et trouvez les différences

Une façon de le faire :

(En supposant que vous savez déjà comment ouvrir un fichier et exécuter une requête.)

Lisez d'abord les lignes de votre CSV et supposez que les données sont manquantes dans 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'];
}

Ensuite, récupérez les lignes de votre requête et remplissez le tableau que vous avez créé à partir du CSV en conséquence.

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

Vous pouvez modifier l'ordre de ceci et traiter les résultats de la requête en premier. L'un ou l'autre ordre fonctionnera, tant que vous effectuez la logique de mise à jour/insertion avec la deuxième source de données.

Vous pouvez ksort($result); si vous voulez que les valeurs fusionnées soient dans l'ordre, alors sortez $result cependant vous devez.