Передать значения из одной таблицы в другую left Join

132
09 января 2021, 13:00

Подскажите пожалуйста, есть 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;
    }
Answer 1

Исправлено

Можно использовать такой запрос:

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
READ ALSO
Отправка на сервер массива байтов

Отправка на сервер массива байтов

У меня есть метод, который отправляет на сервер данные:

160
AssertionError in JUnit test for LinkedList [дубликат]

AssertionError in JUnit test for LinkedList [дубликат]

Написал свой LinkedList, решил протестировать код и застрял на том, что после использования assertThat падает тест, показывает непонятный пробел перед...

127
Помогите понять клиент-сервер

Помогите понять клиент-сервер

Изучаю серверы, пока на простом уровнеЗадача такая: сервер загадывает число, клиент должен его угадать

137
Не воспроизводится звук

Не воспроизводится звук

я использую следующий код:

153