Php 从db2中选择并插入mysql中不存在的位置
此脚本用于连接db2数据库和mysql数据库。db2数据库中有一个定期更新的表,此脚本用于对照mysql中的类似表进行检查,如果db2表中有符合特定条件的记录,而不是mysql中的记录,我将插入它 至于查询,我知道我希望它检查客户姓名和电话号码。因此,如果db2表中的一条记录具有相同的公司名称和电话号码,那么将忽略它,但是如果它是公司名称的不同号码,或者是一条全新的记录,那么我希望插入它。我认为这需要通过一个“不存在”的声明来实现 我的另一个问题是,我不确定比较表的最佳方式,因为它们位于不同的连接上。我假设我将从db2表中进行选择,可能存储该表,然后以某种方式使用存储的内容作为插入的基础 有人能帮我设计这些问题/陈述来克服这些障碍吗 例如: 如果Mysql表Php 从db2中选择并插入mysql中不存在的位置,php,mysql,sql,db2,Php,Mysql,Sql,Db2,此脚本用于连接db2数据库和mysql数据库。db2数据库中有一个定期更新的表,此脚本用于对照mysql中的类似表进行检查,如果db2表中有符合特定条件的记录,而不是mysql中的记录,我将插入它 至于查询,我知道我希望它检查客户姓名和电话号码。因此,如果db2表中的一条记录具有相同的公司名称和电话号码,那么将忽略它,但是如果它是公司名称的不同号码,或者是一条全新的记录,那么我希望插入它。我认为这需要通过一个“不存在”的声明来实现 我的另一个问题是,我不确定比较表的最佳方式,因为它们位于不同的连
customerName | phone
--------------------------
cust123 1234567890
DB2为该公司提供了第二个编号
customerName | phone
--------------------------
cust123 1234567890
cust123 0987654321
然后我只想添加编号为0987654321的记录,因为第一个记录已经存在。一家全新的公司和电话号码也是如此
<?php
//MySql Connection credentials
$mysqlServer = "";
$mysqlUser = "";
$mysqlPass = "*";
//Establilsh MySql Connection
$mysqlConn = new mysqli($mysqlServer, $mysqlUser, $mysqlPass);
//Check MySQL connection
if($mysqlConn->connect_error){
die("Connection Failed: " .$mysqlConn->connect_error);
}
echo "Connected Succssfully to Mysql";
//DB2 Connection Credentials
$DB2Server = "";
$DB2User = "";
$DB2Pass = "";
//Establish DB2 connection
$DB2Conn = odbc_connect("","", "");
//Check DB2 Connection
if(!$DB2Conn){
die("Could not connect");
}
echo "Connected Succssfully to DB2";
//First Query - Select * from db2
/*select * from jacmfg.custmstf*/
/*
Insert Into
jfi.ambition_customer_data (companyNumber, customerName, phone, email)
Select (db2 values) from db2
Where
Not Exists (customerName(db2) = customerName(mysql), phone(db2) = phone(mysql))
*/
?>
> p>而不是在PHP变量中存储DB2数据,考虑将整个客户名称和电话号码表复制到MySQL中进行比较和更新。您可以通过php对数据进行无序处理来实现这一点,但如果您将数据从db2导出到CSV文件,然后使用MySQL的load data local infle
命令从该CSV文件导入数据,则速度可能会更快
然后,假设MySQL中的客户数据表名为customer\u table
,并且从db2导入的数据位于名为staging
的暂存表中,您可以按如下方式将db2表中的新记录插入MySQL表中:
insert into customer_table
(customerName, phone)
select
s.customerName,
s.phone
from
staging as s
left join customer_table as c
on c.customerName=s.customerName
and c.phone=s.phone
where
c.customerName is null;
感谢您的回答,如果我有误解,请原谅,因为它们位于两个不同的连接上,并且db2表每天可能会更新几次,那么在db2转储之后,我如何能够检查这些更新呢?我确实转储了整个表并将其导入mysql,这个过程只是为了将来添加任何可能更新的内容如果您需要在一天中高频率执行这样的检查,并且导出整个表的成本太高,然后,您可能希望在db2表上创建一个触发器,将新行复制到另一个表中定期导出,或者立即导出每一行,并使用守护进程或系统任务以所需的频率检查这些更新,然后将它们拉入MySQL以进行比较/更新。编辑和删除也必须以类似的方式处理。嗯,这就是我不确定的地方,因为这正处于测试阶段。主要数据已经存在,这是我们通过大量导入完成的。问题是明天可能会有一个客户添加到db2端,或者几周内可能没有更新。我只是希望制作一个每天运行的脚本,检查mysql表中没有的任何更新。“最佳”方法至少部分取决于客户表的大小。如果您每天只需要运行一次检查,并且表不太大,那么我的答案中列出的方法可能是最简单的实现方法。如果表非常大,那么就整体性能而言,使用触发器以便只需要导出新的或已编辑的行可能更可取,但需要花费更多的精力来实现。