Изменение свойств в одной таблице, при изменении количества свойства в другой

293
15 июня 2017, 05:28

Я в работе с базами новичек и вот с чем не могу разобраться Заголовок наверно не правильно составил, но суть такая

есть таблица заказов

в ней есть столбец idCake - id тортика который заказали, так же в ней есть столбец confirm, так вот когда на фронте нажимаю кнопку 'подтвердить заказ' я меняю 0 на 1 и запускаю ф-цию которая делает запрос в таблицу 2 в которой есть поля с id тортика и id ингредиентов входящих в состав тортика

В итоге у меня есть массив из объектов я так понимаю будет что то типа [{id:1, quantity200}, {id:2, quantity2}] - сколько нужно ингредиентов списать из таблицы 3 (склад)

И вот возникло 2 вопроса - по правильной логике я строию работу бэка и как правильнее списать ингридиенты со склада ( просто пустить массив в цикл и делать много маленьких запросов или нужно сделать один большой запрос?)

Answer 1

Можно как-то так

UPDATE Ингридиент as ingr
SET quantity = quantity -  (SELECT quantity * Weight FROM Торт WHERE idCake = {{cakeId}} AND idIngr = ingr.id)
WHERE idIngr IN (SELECT idIngr from Торт WHERE idCake = {{cakeId}})

Или можно объединить таблицы Ингридиент и Торт вместо подзапросов

UPDATE Ингридиент as I
INNER JOIN ( SELECT quantity * Weight FROM Торт
             WHERE idCake = {{cakeId}} ) as T ON I.idIngr = T.idIngr
SET I.quantity = I.quantity - T.quantity

Не тестировал код на работоспособность.

Answer 2

Даже на самом непримечательном железе 1000 запросов к БД отработаются так, как будто ничего и не было. Не думаю, что сайт с производством тортиков будет иметь 100к хитов в сутки. Я бы сделал 2 запроса: 1 к таблице заказов, для подтверждения, 2 для списания продуктов. Плюс ко всему, если подтверждение будет идти из админки, то думать об этом не нужно вовсе, ибо 100 таких хитов БД даже не почувствует.

READ ALSO
SQL запрос. Please help [требует правки]

SQL запрос. Please help [требует правки]

есть две таблицы: BOOKS и COMMENTS, а также массив ID(более 100)Table BOOKS :+ ID_BOOKS + ID_EBOOKS + TABLE COMMENTS: + ID + MARK +

211
Как сделать транзакции в таблице [требует правки]

Как сделать транзакции в таблице [требует правки]

Есть две таблицы , в первой содержаться имена(Ваня, Андрей, Иван) , во второй их лицевой счет, как сделать так чтобы при изменении лицевого счета...

197
Помогите составить сложный sql запрос

Помогите составить сложный sql запрос

Есть таблица, одним запросом хочу получить, к примеру, 2 значения - сумма значений value и сумма значений points, но не могу понять, как составить...

241