比较mysql和csv并找出差异

s4chpxco  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(574)

我有一个 CSV 包含一列名为ean和 MySQL 表中也包含名为ean的列。
这是我想要做的比较两列:

CSV ||| MySQL ||| STATUS
123     123       OK
321     321       OK
444               MISSING IN MySQL
        111       MISSING IN CSV

有没有什么办法 PHP ?

amrnrhlw

amrnrhlw1#

一种方法是:
(假设您已经知道如何打开文件并执行查询。)
首先从csv中读取行,并假设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'];
}

然后从查询中提取行,并相应地填充从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'];
    }
}

您可以更改其顺序并首先处理查询结果。只要对第二个数据源执行更新/插入逻辑,任何一个顺序都可以工作。
你可以 ksort($result); 如果希望合并的值按顺序排列,则输出 $result 不管你怎么想。

相关问题