Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查一个数据库中的项是否存在于另一个数据库中,如果存在,则更新现有记录的方法_Php_Mysql_Sql_Database_Pdo - Fatal编程技术网

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

Php 检查一个数据库中的项是否存在于另一个数据库中,如果存在,则更新现有记录的方法,php,mysql,sql,database,pdo,Php,Mysql,Sql,Database,Pdo,这是我的场景,我有两个数据库 数据库1称为store_sales,它有一个名为transactions的表 这是表格的结构 **transactions table** CustomerFName, CustomerLName, Address, City, State, Zip, transNumber, dealDate, customerNumber, itemBought, matched, newCustomer 数据库2称为contacts,有一个名为people的表 下

这是我的场景,我有两个数据库

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

这是表格的结构

**transactions table**

    CustomerFName, CustomerLName, Address, City, State, Zip, transNumber, dealDate, customerNumber, itemBought, matched, newCustomer
数据库2称为contacts,有一个名为people的表

下面是人员表的结构

**people table**

CustomerFName, CustomerLName, Address, City, State, Zip, campaignName, campaignStartDate, campaignEndDate
people表是我进行营销的联系人列表,我的people表中有一个40万条记录的列表。每次我对唱片进行营销时,我都会给唱片指定一个活动名称,这样我就知道我在活动中向谁发送了营销材料。因此,如果我发起一个名为summer-sale2016的活动,并在该活动中包含10万封电子邮件,那么10万条记录将以“summer-sale2016”作为其活动名称记录

transactions表是自商店开业以来,商店所有交易的列表,因此,如果商店开业8年,可能有17k笔交易,这意味着该数据库中有17k条记录

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

我想从我的人员表中选择具有特定活动名称的所有记录,并检查人员表中的地址和城市是否与交易“dealDate”所在的交易表中具有相同地址和城市的任何记录匹配单元格值介于人员活动开始日期和活动结束日期之间如果存在匹配,则表示此交易很可能是我的营销活动的结果

从上述条件中找到匹配项后,我想将记录的交易匹配单元格更新为用于匹配人员记录的活动名称,然后我想做的是检查匹配的交易记录在商店中是否有任何以前的历史记录,如果是,则意味着它不是新客户,但如果它之前没有在该商店的历史记录,则意味着该客户是新客户,我正在联系新客户

这就是我想做的

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

步骤3 在这一步中,我检查是否找到了任何东西,如果找到了,那么这意味着一条记录已匹配,所以这次我执行另一个SQL查询,更新事务表中匹配的记录

正如您可以想象的那样,这将永远持续下去,并在一个脚本中执行大量查询

它可以工作,但需要很长时间。我知道这不是一个好方法,我需要一个更好的方法来做这件事的建议


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

为什么不将表放在一个数据库中,从而更容易编码?表有时会变得有点疯狂,我还有一个数据库有超过1200万条记录。我从零开始重新启动这个数据库,并被建议将这两个数据库分开,因为我的人员表和事务表是数据集中最大的表。1200万条记录不算大。数据库设计用于高效地进行连接,远远超过PHP!!也许您应该简单地稍微改进一下运行DB的硬件?我可以在我的笔记本电脑上使用SSD和SQL Server免费版(或postgres…)进行1亿行表联接。将表放在同一位置,对它们进行适当索引,然后执行查询。检查另一个表中是否存在地址以及是否使用特定值更新记录的正确语法是什么?听起来好像我必须将这两个表都放在一个数据库中
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']));
}