【问题标题】:Compare MySQL with CSV and find differences比较 MySQL 和 CSV 并找出差异
【发布时间】:2018-12-03 22:39:15
【问题描述】:

我有一个 CSV 文件,其中有 1 列名为 EAN 和一个 MySQL 表,其中有一列名为 EAN

这是我想要比较两列的内容:

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

任何想法如何用PHP实现?

【问题讨论】:

标签: php mysql csv compare


【解决方案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,但您需要。

【讨论】:

  • 感谢您的意见,这是正确的美杜莎 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多