比较MySQL和CSV并发现差异

时间:2018-12-03 22:39:16

标签: php mysql csv compare

我也有一个groupBy文件,其中有1列名为 EAN 。还有一个CSV表,其列名为 EAN

这是我要比较两列的操作:

MySQL

有什么想法如何通过CSV ||| MySQL ||| STATUS 123 123 OK 321 321 OK 444 MISSING IN MySQL 111 MISSING IN CSV 实现吗?

1 个答案:

答案 0 :(得分:1)

一种方法:

(假设您已经知道如何打开文件并执行查询。)

首先从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