Подскажите пожалуйста, есть 2 таблицы с общим order_id. В первой таблице есть поле total, в это поле нужно передать значения поля quantity из второй таблицы. Передать нужно по ключу order_id. То-есть у каждого заказа есть количество (quantity) его нужно передать в total. Пробовал делать через left Join, выдает 0.
if(!$order_id = waRequest::post('order_id', 0)) {
$this->errors[] = 'Не передан order_id';
return;
}
$order_model = new shopOrderModel(); // дефолтная модель
$order = $order_model->getOrder($order_id);
$quants = "SELECT shop_vmeste_order *, shop_order_items.quantity FROM shop_vmeste_order LEFT JOIN shop_order_items ON shop_order_items.order_id = shop_vmeste_order.order_id";
$quants_items = $this->query($quants)->fetchAll();
$vmesteCheck = false;
foreach($order['items'] as $item) {
if($item['sku_code'] != $this->plugin->getSettings('skuCodeIdentifier')) {
$vmesteCheck = false;
break;
}
$vmesteCheck = true;
}
Можно использовать такой запрос:
UPDATE `shop_vmeste_order` t2
INNER JOIN (
SELECT order_id, SUM(quantity) as total
FROM `shop_order_items`
GROUP BY order_id
) t1
ON t2.order_id = t1.order_id
SET t2.total = t1.total
Он пересчитает сразу все данные. Вот пример
Если нужно пересчитать только один заказ, то:
UPDATE `shop_vmeste_order` t2
INNER JOIN (
SELECT order_id, SUM(quantity) as total
FROM `shop_order_items`
WHERE order_id = 1
GROUP BY order_id
) t1
ON t2.order_id = t1.order_id
SET t2.total = t1.total
Заметьте, что ставить WHERE
следует именно в под-запрос.
Для одного заказа можно ещё и так, но выглядит неизящно:
UPDATE `shop_vmeste_order`
SET total = (
SELECT SUM(quantity)
FROM shop_order_items
WHERE order_id = 1
GROUP BY order_id
)
WHERE order_id = 1
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Написал свой LinkedList, решил протестировать код и застрял на том, что после использования assertThat падает тест, показывает непонятный пробел перед...
Изучаю серверы, пока на простом уровнеЗадача такая: сервер загадывает число, клиент должен его угадать