Javascript.RU

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

Сообщение от laimas Посмотреть сообщение
Вдумайтесь в то, что вы написали, и это в контексте вставки в базу. Если "INSERT INTO `sales` (`id`" и при этом его значение указывается null, значит это новая запись, для поля id с автоинкрементом. Так? А если так, у кого нужно проверить значение, если записи как таковой в базе еще не существует?

Можно предполагать, например, это заказ/продажа пишется в таблицу А, то есть информация о неком продукте. Сами продукты описаны в таблице В. Тогда в одном запросе можно обратиться к таблице В, сравнив его остаток со вставляемым значением в таблицу А. Делается это так как я показывал.

Ваше же пояснение ни о чем не говорит, что с чем, откуда это все, не понять.
Хорошо, завтра я над этим поработаю.
Ответить с цитированием
  #12 (permalink)  
Старый 09.11.2020, 14:09
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Не придумал ничего умнее чем в цикле создать запрос вида
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.
Ответить с цитированием
  #13 (permalink)  
Старый 09.11.2020, 14:12
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

надо было триггер beforeInsert написать... и использовать транзацию)
Ответить с цитированием
  #14 (permalink)  
Старый 09.11.2020, 14:18
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Сообщение от SuperZen Посмотреть сообщение
надо было триггер beforeInsert написать... и использовать транзацию)
Пожалуйста опишите подробнее вашу рекомендацию, триггер это уже на стороне мускула, как я понимаю.

П.С, сейчас попробую сделать процедуру.
П.С, пошел смотреть продвинутый курс по mysql, бех этих знаний не обойтись.

Последний раз редактировалось andrew76, 09.11.2020 в 14:33.
Ответить с цитированием
  #15 (permalink)  
Старый 09.11.2020, 14:31
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

надо писать много букаф ).. по вашему получается: можно купить только половину, а можно и все, а можно и ничего, а если будет несколько пользователей, претендующих на одно и тоже... потом тень на плетень, сиди и думай ) кому и что показывать на какие запросы...
Ответить с цитированием
  #16 (permalink)  
Старый 09.11.2020, 14:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

'INSERT INTO `sales` (`id`, `code`, `quantity`, `price`, `sum`, `idCheck`)

и при это для id указывать null не обязательно, проще убрать id из запроса. А проверить надо с параметрами таблицы prais_informations? Что с чем?
Ответить с цитированием
  #17 (permalink)  
Старый 09.11.2020, 15:07
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

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 заказ дальше не идет, запись в БД не происходит.
Ответить с цитированием
  #18 (permalink)  
Старый 09.11.2020, 15:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Что с чем сравнивать? Это не сравнение, это получение параметров из другой таблицы. С какими полями таблицы `sales` нужно сравнивать эти параметры?
Ответить с цитированием
  #19 (permalink)  
Старый 09.11.2020, 15:17
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

sales: таблица в которую просто идет запись(тот самый мульти инсерт, c этой таблицей ничего сравнивать не нужно, в неё только запись)

sales

prais_information AS pi: таблица в которой лежат остатки, от клиента приходит массив вида [id, quantity, price, sum]

Соответственно pi.code === id and pi.stock >= quantity

pi

Последний раз редактировалось andrew76, 09.11.2020 в 15:21.
Ответить с цитированием
  #20 (permalink)  
Старый 09.11.2020, 16:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Да, не получится при многострочной вставке проверить, так как нельзя выбрать группы записей у несуществующего и сослаться не на что. Без временной таблицы не обойтись. Только в цикле:

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)
})

Последний раз редактировалось laimas, 09.11.2020 в 17:15.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
textContent,innerHTML \r\n в MySql . Как вывести з Mysql текс з абзацами в Js xxxAsterothxxx jQuery 4 26.11.2019 18:56
nodeJS и mysql vmetnev@mail.ru Node.JS 1 06.09.2019 23:37
MySQL запрос INSERT INTO allonemoon Серверные языки и технологии 1 02.05.2017 05:30
Node.js + mysql mazahist Node.JS 4 17.11.2016 19:07
Как записать JSON объект в mysql таблицу. user71 Node.JS 6 31.07.2016 13:01