Цитата:
|
Не придумал ничего умнее чем в цикле создать запрос вида
SELECT true WHERE (SELECT prais_informations.stock FROM prais_informations WHERE prais_informations.code = 1 LIMIT 1) > 7 UNION SELECT true WHERE (SELECT prais_informations.stock FROM prais_informations WHERE prais_informations.code = 2 LIMIT 1) > 3 вернуть промис и на основе ответа делать/не делать запрос insert. |
надо было триггер beforeInsert написать... и использовать транзацию)
|
Цитата:
П.С, сейчас попробую сделать процедуру. П.С, пошел смотреть продвинутый курс по mysql, бех этих знаний не обойтись. |
надо писать много букаф ).. по вашему получается: можно купить только половину, а можно и все, а можно и ничего, а если будет несколько пользователей, претендующих на одно и тоже... потом тень на плетень, сиди и думай ) кому и что показывать на какие запросы...
|
'INSERT INTO `sales` (`id`, `code`, `quantity`, `price`, `sum`, `idCheck`)
и при это для id указывать null не обязательно, проще убрать id из запроса. А проверить надо с параметрами таблицы prais_informations? Что с чем? |
SELECT prais_informations.stock <= количество для товара 0* FROM prais_informations WHERE prais_informations.code = код товара 0* ... SELECT prais_informations.stock <= количество для товара n* FROM prais_informations WHERE prais_informations.code = код товара n* * - приходит в запросе от клиентской части. где n количество товаров в текущем заказе, товары не дублируются, если хотя бы один из этих запросов возвращает false заказ дальше не идет, запись в БД не происходит. |
Что с чем сравнивать? Это не сравнение, это получение параметров из другой таблицы. С какими полями таблицы `sales` нужно сравнивать эти параметры?
|
sales: таблица в которую просто идет запись(тот самый мульти инсерт, c этой таблицей ничего сравнивать не нужно, в неё только запись)
sales prais_information AS pi: таблица в которой лежат остатки, от клиента приходит массив вида [id, quantity, price, sum] Соответственно pi.code === id and pi.stock >= quantity pi |
Да, не получится при многострочной вставке проверить, так как нельзя выбрать группы записей у несуществующего и сослаться не на что. Без временной таблицы не обойтись. Только в цикле:
var data = [ [code, quantity, ....], [code, quantity, ....], .... ]; data.forEach((d)=> { query('INSERT INTO sales (code, quantity, ...) SELECT ' + d.join(',') + ' WHERE (SELECT stock FROM pi WHERE code=' + d.code + ') >=' + d.quantity) }) |
Часовой пояс GMT +3, время: 15:10. |