2017-09-07 39 views
1

此脚本用于连接到db2数据库以及mysql数据库。 db2数据库中有一个定期更新的表,这个脚本的目的是检查它是否与mysql中的类似表相对应,并且如果匹配某些条件的记录位于db2表中但不是mysql,我将插入它。从db2中选择并插入mysql中不存在的位置

至于查询,我知道我希望它检查客户名称和电话号码。因此,如果db2表中的记录具有相同的公司名称和电话号码,则该记录将被忽略,但如果完全是公司名称或全新记录的不同号码,则要插入它。我相信这需要通过“不存在”声明来完成。

我的另一个问题是我只是不确定比较表的最佳方式,因为他们在不同的连接。我假设我会从我的db2表中选择,也许存储,然后以某种方式使用存储的基础我的INSERT关闭。

有人可以帮助我制作这些查询/陈述来克服这些障碍吗?

例子:

如果MySQL表有

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)) 

    */ 



    ?> 

回答

1

并非存储在PHP变量DB2数据,考虑复制客户的姓名和电话号码的整个表到MySQL这种比较和更新。您可以通过使用php对数据进行整理,但如果将其从db2导出到CSV文件,然后使用MySQL的load data local infile命令从该CSV文件导入数据,则很可能会更快。

然后,假设你在MySQL客户数据的表被命名为customer_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; 
+0

感谢您的回答,并且对不起,如果我误解了,但由于它们在2个不同的连接上,并且db2表可以每天更新多次,那么我将如何检查这些更新从db2转储后?我做了转储整个表并将其导入到mysql中,这个过程只是为了将来添加任何可能更新的东西 –

+0

如果您需要在一天中以高频率执行此类检查,并且导出整个表格将是代价太高,那么您可能需要在db2表上创建一个触发器,该触发器将新行复制到另一个表中以定期导出,或者立即导出每行,并使用守护进程或系统任务以所需频率检查这些更新然后将它们拉到MySQL中进行比较/更新。编辑和删除必须以相似的方式处理。 –

+0

嗯,这是我不确定的地方,因为这是处于测试阶段。主要数据已经存在,我们通过大量进口完成。问题是明天可能会将客户添加到db2端,或者几周内可能没有更新。我只是希望创建一个脚本每天运行,以检查是否有任何不在mysql表中的更新 –