【发布时间】:2018-02-26 15:43:16
【问题描述】:
我正在尝试修改一个脚本,该脚本在 DB2 上运行了一个非常基本的 SELECT 查询。我需要存储该结果集,最好存储在一个数组块中,以便我可以分批运行它,但仍然在一个数组中,然后我需要在 MYSQL 上的 INSERT/SELECT 中使用这些值。
经过一些反馈后,我想我可能不得不将 DB2 结果用作常量,但我真的不知道该怎么做。
这是我如何选择的模型,以及我需要如何根据选择结果集和另一个 mysql 表上的子查询进行插入:
我从这里选择: DB2 查询结果
Invoice | Dealer | Rep | quantity | Frame | Cover | Color | Placements | shipdate
---------------------------------------------------------------------------------
100 123 250 1 1234 12 1 2 20180219
101 321 250 1 1235 12 1 2 20180219
102 432 250 1 1236 12 1 2 20180219
我需要在某种意义上将前面的数据加入到后面的数据中 SKU 表(db2.style = sku.groupID、db2.frame = sku.frame、db2.cover = sku.cover 和 db2.color = sku.color)以获取正确的 ID
ID | Frame | GroupID | cover | color
------------------------------------
15 1234 1 12 1
16 1235 2 12 1
17 1236 3 12 1
然后在下面,我需要插入先前确定的 ID,以及原始 DB2 查询中的一些数据(将 style 插入 groupID,dealer 插入dealerID,shipdate 插入 startdate,placement 插入placement)
INSERT 将导致:(skuplacement 表)
sku_id | groupID | dealerID | startDate | expirationDate | placements
------------------------------------------------------------------------------
15 1 123 20180226 (shipdate + 127 days) 2
16 2 123 20180226 (shipdate + 127 days) 2
17 3 123 20180226 (shipdate + 127 days) 2
我知道我不能在 DB2 和 MySQL 之间加入,所以我需要一种方法来在数组中使用我选择的值,并将这些变量用于 mysql INSERT 和 Sub-Query。我希望我可以在 PHP 脚本中完成这一切,而不是 CSV/临时表方法。
这是脚本:
try {
$DB2Conn = odbc_connect("","", "");
if(!$DB2Conn){
die("Could not connect");
}else{
echo"Connected to DB2";
}
$plcQueryDB2 = "
select invnoc AS INVOICE,
cstnoc AS DEALER,
slsnoc AS REP,
orqtyc AS QUANTITY,
framec AS FRAME,
covr1c AS COVER,
colr1c AS COLOR ,
extd1d AS SHIPDATE
FROM GPORPCFL
group by invnoc,cstnoc, slsnoc, orqtyc, framec, covr1c,colr1c, extd1d
limit 200
";
$prep = odbc_prepare($DB2Conn, $plcQueryDB2);
$exec = odbc_execute($prep);
$result = odbc_exec($DB2Conn, $plcQueryDB2);
}
catch(Exception $e) {
echo $e->getMessage();
}
$array = array();
//$i = 0;
while($arr = odbc_fetch_array($result))
{
// if(++$i % 200 == 0) {
// }
$array[] = $arr;
//echo $arr;
}
//Put $result into array chunk, process records in hundreds, possibly by 200 at a time
//Logic for the query results Insert/ Upsert
//This is pseudo code
// if ($row['placements'] < count){ //Here, I am iterating to ensure that there are only as many records inserted as there are placements. 3 placements = 3 records
// $insertsql = "
// ";
// }
在插入之后我有一些伪代码和一些没有完全解决的逻辑,但我首先需要解决的主要问题是如何以一种我可以将我的 db2 结果集等同于字段的方式插入在一个 mysql 表中,然后将所有这些结果放入第三个 mysql 表中。希望我在顶部的模型是有意义的。
我可以回答任何问题来澄清。
【问题讨论】:
-
我删除了另一个问题,这是为了反映最近的变化而修改的
-
一种简单的方法是使用值从 db 1 检索结果,然后使用按钮将相同的值插入 db 2 。像一个表格。
-
我不确定这将如何工作?没有接口,这是一个每天运行的 php 脚本,用于从 DB2 获取遗留数据,将其中一些值等同于 mysql 中的表,然后从中获取结果集并插入到最终的 mysql 表中
-
你想重新发明一个轮子?你见过dbconvert.com/db2/mysql 吗?你知道 Db2(如果获得 Infosphere Federation Server 许可证)可以在配置后加入 mysql(通过 jdbc 包装器或 odbc 包装器)?
-
@mao 我以前从未见过,我们的生产服务器上没有运行它,但我可以调查一下。我只是觉得可能有一种相当简单的方法可以在 php 脚本中实现这一点。如果我只是选择和插入,这没什么大不了的,但我必须将其中一些 DB2 值等同于 mysql 值