Тема: mysql multi insert
Показать сообщение отдельно
  #8 (permalink)  
Старый 07.11.2020, 20:38
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Сообщение от laimas Посмотреть сообщение
andrew76,
что с чем сравнивать не знаю, но зачастую отдельного запрос не требуется. Пример простой, если я правильно понял, то нужно типа такого:

"INSERT INTO table (count) SELECT N WHERE (SELECT balance FROM table LIMIT 1) > N"

где N - это вставляемое количество в поле count, balance - это поле остатка в этой же таблице. Тут используется просто поле со значением по умолчанию, для всех, поэтому и LIMIT 1. Если вставка для конкретного ID, то нужно взять для этого ID, но сама вставка при этом, это уже будет обновление. То есть остаток по идее, это уже другая таблица, откуда он и извлекается для ID. Иначе это только ON DUPLICATE KEY UPDATE.
Чтобы не быть голословным, вот таблицы:
https://ibb.co/NntTBDr

https://ibb.co/tm4z09n


В функции, которую я представил выше, формируется запрос вида:
INSERT INTO `sales` (`id`, `code`, `quantity`, `price`, `sum`, `idCheck`) 
VALUES 
(null, item.id, item.quantity, item.price, item.sum, 3), 
(null, item.id, item.quantity, item.price, item.sum, 3)
, ... , 
(null, item.id, item.quantity, item.price, item.sum, 3);


Но прежде чем сделать инсерты в `sales` нужно проверить, не превышает ли доступный остаток каждый элемент из VALUES.

1. Мне кажется одним запросом это не сделать, нужно написать новую функцию, которая примет массив, сравнит quantity c balance и вернет промис. Задача довольно типовая, поэтому я и задаюсь вопросом, как это реализовать правильно.

Последний раз редактировалось andrew76, 07.11.2020 в 20:39. Причина: image
Ответить с цитированием