检查一个数据库中的项目是否存在于另一个数据库中的方法,如果存在,则更新现有记录

时间:2016-01-12 17:55:01

标签: php mysql sql database pdo

所以这是我的方案,我有两个数据库。

数据库1称为store_sales,它有一个名为transactions的表。

这是表格的结构

**transactions table**

    CustomerFName, CustomerLName, Address, City, State, Zip, transNumber, dealDate, customerNumber, itemBought, matched, newCustomer

数据库2称为联系人,并有一个名为people的表。

这是人员表的结构。

**people table**

CustomerFName, CustomerLName, Address, City, State, Zip, campaignName, campaignStartDate, campaignEndDate

人员表是我进行营销的联系人列表,我在人员表中列出了400k记录。每次我对记录进行营销时,我都会将一个campaignName分配给一条记录,因此我知道我在一个广告系列中发送了营销材料的人。因此,如果我开始一个名为summer-sale2016的广告系列,并且我在该广告系列中包含了100k的电子邮件,那么100k记录就会产生" summer-sale2016"作为他们的campaignName记录。

交易表是自商店开业以来商店的所有交易清单,因此如果商店已开放8年,则可能有17k交易,这意味着我在该数据库中有17k条记录。

在我进入这个项目的程度之前,让我告诉你我计划做什么。

我想从我的人员表中选择具有特定campaignName的所有记录,并检查人员表中的地址和城市是否与事务表中具有相同地址和城市的任何记录匹配" dealDate"如果匹配,则单元格值在人员campaignStartDate和campaignEndDate之间,则表示此交易很可能是我的营销活动的结果。

从上述条件中找到匹配后,我想将记录的交易匹配单元格更新为用于匹配人员记录的广告系列名称,我想要检查是否匹配交易记录在商店中有任何先前的历史记录,如果它确实那么它意味着它不是一个新的客户,但如果它没有商店的先前历史,那么它意味着客户是新的,我正在接触新的人。

这就是我想做的事。

这是我正在做的事情(要么不起作用,要么太慢,最终出错)。

Step 1
Select all records from people table that match a specific campaign name.

Step 2
Create a foreach loop that iterates through the array of people records found, every time I loop I have  a PDO select that looks like this.

$db->$query->prepare("SELECT * from transactions WHERE Address=? AND City=? AND dealDate Between ? AND ?");
foreach($dataIgotFromStep1 as $key){
    $db->execute(array($key['Address'], $key['City'], $key['campaignStartDate'], $key['CampaignEndDate']));
}

第3步 在这一步中,我检查是否找到了任何内容,如果是,则表示匹配的记录,所以我再次执行另一个SQL查询,更新事务表中的匹配记录。

你可以想象,这需要永远,并在一个脚本中进行大量的查询。

它有效,但需要很长时间。我知道这不是一个很好的做事方式,我需要更好的方法来提供建议。

提前感谢您,我感谢您的帮助

0 个答案:

没有答案