gpt4 book ai didi

php - 根据 php 脚本中 db2 查询的结果插入 mysql 表

转载 作者:行者123 更新时间:2023-11-29 10:22:26 26 4
gpt4 key购买 nike

我正在尝试修改一个在 DB2 上运行的非常基本的 SELECT 查询的脚本。我需要存储该结果集,最好存储在数组 block 中,这样我就可以批量运行它,但仍然存储在数组中,然后我需要在 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,将 Places 插入 Placements)

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 和子查询。我希望我可以在 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 表中。希望我在顶部的模型有意义。

我可以回答任何问题以澄清。

最佳答案

我会在从 DB2 获取行的循环内执行此操作。

假设您有一个到 MySQL 数据库的 PDO 连接 $pdo

$stmt = $pdo->prepare("
INSERT INTO skuplacement (sku_id, groupID, dealerID, startDate, expirationDate, placements)
SELECT id, groupID, :DEALER, :SHIPDATE, :PLACEMENTS
FROM sku
WHERE groupID=:STYLE AND frame=:FRAME AND cover=:COVER AND color=:COLOR
");

$pdo->beginTransaction();
$i = 0;
while($db2row = odbc_fetch_array($result)) {

if(++$i % 1000 == 0) {
$pdo->commit();
$pdo->beginTransaction();
}

$stmt->execute($db2row);

}
$pdo->commit();

PDO 允许您将关联数组传递给 execute(),并且数组键与准备好的查询中的命名参数占位符相匹配。但是您的关联数组必须具有与参数完全相同相同的键集。

因此,您需要更改 DB2 查询以仅返回 STYLE、DEALER、FRAME、COVER、COLOR、SHIPDATE、PLACMENTS。

关于php - 根据 php 脚本中 db2 查询的结果插入 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48992065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com