Вставка в таблицу MySQL на основе результатов запроса db2 в сценарии php

0

Я пытаюсь изменить скрипт, который имеет очень простой запрос SELECT, запущенный в DB2. Мне нужно сохранить этот набор результатов, желательно в блоке массива, поэтому я могу запускать его партиями, но в массиве, тем не менее, а затем мне нужно использовать эти значения в INSERT/SELECT на MYSQL.

Я думаю, после некоторой обратной связи, что мне, возможно, придется использовать результаты 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 | Frame | GroupID | cover | color 
------------------------------------
15    1234      1        12      1
16    1235      2        12      1
17    1236      3        12      1

Затем ниже, мне нужно сделать вставку ранее определенного идентификатора, а также некоторые данные из исходного запроса DB2 (введите стиль в groupID, дилер в дилерский идентификатор, отправьте его в стартовую дату, места размещения в места размещения)

INSERT приведет к: (таблице скручивания)

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/temp.

Вот сценарий:

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. Надеюсь, мой макет наверху имеет смысл.

Я могу ответить на любые вопросы, чтобы уточнить.

  • 0
    Я удалил этот другой вопрос, он был изменен, чтобы отразить последние изменения
  • 0
    простой способ - извлечь результаты из db 1, используя значение, а затем вставить те же значения в db 2, используя кнопку. как в форме.
Показать ещё 7 комментариев
Теги:
db2

1 ответ

1
Лучший ответ

Я бы сделал это внутри цикла, где вы извлекаете строки из DB2.

Предположим, что у вас есть PDO-соединение $pdo в вашей базе данных MySQL.

$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, PLACEMENTS.

  • 0
    О, я вижу, потому что дата счета не нужна, очевидно. Таким образом, это берет хранимые переменные DB2, и это также помогает с проблемой порции массива. Спасибо, я собираюсь интегрировать это в свой сценарий и поиграть с ним немного!
  • 0
    Быстрый вопрос @ Билл Карвин, у меня нормальное соединение с MySQL, которое называется $ conn. Должен ли я изменить это на PDO?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню