MySQL recID auto_increment противоречивые результаты - PullRequest
0 голосов
/ 22 января 2020

У нас есть форма заказа, работающая в стеке LAMP, которая позволяет клиентам создавать заказ в течение неограниченного времени. Skus и цены добавляются в таблицу pending_order и cart_items. Когда этот клиент наконец отправляет свой заказ, мы делаем следующее.

Мы хотим, чтобы cart_items сортировал в указанном c складском заказе на комплектование. Таким образом, мы делаем выборку для клиентов cart_items и сортируем возвращаемый набор. Если он успешен, мы затем l oop через возвращаемый набор и вставляем эти значения в таблицу line_items.

По ходу дела мы создаем запись в таблице заказов, которая связана с таблицей line_items custID и recID из заказа, созданного до появления line_items. Мы успешно используем это в течение многих лет. Совсем недавно мы начали замечать проблему. В качестве теста мы запускаем простой запрос к таблице line_items по любому конкретному orderID. Большинство из них теперь отображают возвращенный набор в обратном порядке (recID). Там нет порядка по участию в запросе. Пара ордеров будет go в line_items в обратном порядке, а затем по какой-то причине следующий будет корректно go, так что этот вышеупомянутый запрос покажет line_items с приращением recID. Я полностью сбит с толку относительно того, почему это происходит. Вот код:


    
    /*
    // THEN CREATE LINE ITEMS
    */
    $results4 = $dbh->prepare("
    SELECT 
    cart_items.catID, 
    cart_items.lupID,               
    cart_items.groupID, 
    cart_items.item_sku, 
    cart_items.quantity, 
    products2.price
    FROM cart_items, products2  

    WHERE 
    cartID = :cartID AND 
    lupID = :lupID AND
    cart_items.catID = products2.catID AND
    cart_items.groupID = products2.groupID AND
    products2.item_code = cart_items.item_sku AND
    products2.show_hide = 1

    ORDER BY products2.sort_group,products2.cat_sort_order, products2.groupID, products2.sub_catID, products2.subcat_sort_order, products2.sort_order ASC");

    $results4->execute(
    array(
    ':cartID' => $cartID,
    ':lupID' => $lupID
    )
    );

    if($results4) {
    while($row4 = $results4->fetch()) {   

    $lupID = $row4['lupID'];
    $catID = $row4['catID'];
    $groupID = $row4['groupID'];
    $item_sku = $row4['item_sku'];
    $quantity = $row4['quantity'];
    $price = $row4['price'];

    $createSQL = $dbh->prepare("INSERT INTO line_items (orderID,lupID,catID,groupID,item_sku,quantity,price) 

    VALUES(:orderID,:lupID,:catID,:groupID,:item_sku,:quantity,:price)");

    $createSQL->execute(

    array(
    ':orderID' => $orderID,
    ':lupID' => $lupID,
    ':catID' => $catID,
    ':groupID' => $groupID,
    ':item_sku' => $item_sku,
    ':quantity' => $quantity,
    ':price' => $price
    )
    );

    }  

    ?>

Затем мы удаляем отложенный ордер и связанные строки из таблицы cart_items и оптимизируем их оба. Как я уже сказал, это работало очень хорошо в течение многих лет. Единственное, что изменилось, это версия mysql, которую мы используем. Долгое время мы использовали 5.5.44, но cPanel устарела в этой версии, поэтому мы перешли на 5.6.45. Мы все еще используем ту же версию PHP 5.5.38

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...