从db2中选择并插入mysql

时间:2017-09-07 15:34:56

标签: php mysql sql db2

此脚本用于连接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 个答案:

答案 0 :(得分:1)

不要将db2数据存储在php变量中,而是考虑将整个客户名称和电话号码表复制到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;