У нас есть форма заказа, работающая в стеке 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