Javascript.RU

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

Буду использовать временную таблицу.

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

Сообщение от andrew76
Буду использовать временную таблицу
Если ваше условие, что я проглядел, это нет вставки если хотя бы один товар из вставляемых не отвечает условию, то смысла во временной таблице нет, проще сделать запрос

'SELET 1 WHERE NOT EXISTS (SELECT * FROM pi WHERE code IN(sales.code, sales.code, ....) AND stock BETWEEN sales.quantity.min AND sales.quantity.max)'


и если вернуло, значит можно вставлять, иначе нет. Если же разрешено вставлять товары, которые отвечают условию, то функция INSERT возвращает число вставленных записей. То есть, если записывать в цикле и проверять результат возвращаемый, то можно вернуть пользователю отчет, какие товары не добавлены, или наоборот обрадовать.
Ответить с цитированием
  #23 (permalink)  
Старый 10.11.2020, 08:20
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Элегантное решение моих union select, сделать такой select и при правильном исходе в .then делать insert. Решение неплохое, но оно КМК не "энтерпрайз". В любом случае спасибо за помощь, я отпишусь в конце недели, как просмотрю и усвою курс. Спасибо.
Ответить с цитированием
  #24 (permalink)  
Старый 10.11.2020, 08:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от andrew76
Элегантное решение моих union select
Когда UNION считался элегантным решением? И зачем вообще оно нужно? Вы же хотите узнать есть ли недопустимые значения, а это как показано, для всех входящих sales.code и их диапазона значений, то есть нет ли значения stock в диапазоне мин/мах sales.quantity. Зачем же плодить юнионы, которые в данном случае как собаке пятая лапа?
Ответить с цитированием
  #25 (permalink)  
Старый 10.11.2020, 11:08
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Боюсь вы неверно поняли, я хотел сказать, что наговнокодил с UNION, вы же написали элегантное решение. Недопонимание вышло.
Ответить с цитированием
  #26 (permalink)  
Старый 10.11.2020, 11:13
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

напиши хранимую процедуру )) https://www.mysqltutorial.org/mysql-if-statement/
Ответить с цитированием
  #27 (permalink)  
Старый 10.11.2020, 11:40
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Как сделаю, выложу.
Ответить с цитированием
  #28 (permalink)  
Старый 10.11.2020, 18:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от andrew76
Боюсь вы неверно поняли
Видимо так, но если вы будете проверять запросом что я показывал, то из мин/макс значений вставляемых надо вычитать 1, так как BETWEEN не вернет "можно вставлять", если любое из значений будет равно stock, а у вас это разрешено.
Ответить с цитированием
  #29 (permalink)  
Старый 13.11.2020, 09:42
Интересующийся
Отправить личное сообщение для andrew76 Посмотреть профиль Найти все сообщения от andrew76
 
Регистрация: 07.11.2020
Сообщений: 16

Прикладываю процедуру, которую сделал на данный момент, из проблем insert в таблицу sales проходит, но пропускается один индекс (скрин).
Так же подскажите как правильно обновить остатки на складах, что то вроде(stackoverflow)
You can use a CASE statement to handle multiple if/then scenarios:

UPDATE table_to_update 
SET  cod_user= CASE WHEN user_rol = 'student' THEN '622057'
                   WHEN user_rol = 'assistant' THEN '2913659'
                   WHEN user_rol = 'admin' THEN '6160230'
               END
    ,date = '12082014'
WHERE user_rol IN ('student','assistant','admin')
  AND cod_office = '17389551';



Процедура:

BEGIN

DECLARE res INT;
DECLARE last_index INT;
SET @input := 'sales:  [  { id: 2, quantity: 5, price: 123, sum: 615 },  { id: 1, quantity: 9, price: 97, sum: 873 } ]';

SET @input:=REPLACE(@input, ' ', '');
SET @input:=REPLACE(@input, 'sales:', '');
SET @input:=REGEXP_REPLACE(@input, '([{,])([a-z])', '$1"$2');
SET @input:=REGEXP_REPLACE(@input, '([a-z]):', '$1":');

CREATE TEMPORARY TABLE new_tbl SELECT jtin.id AS jtin_id, jtin.quantity AS jtin_qty, pi.stock AS pi_qty, pi.price AS pi_price
FROM JSON_TABLE(@input,
                "$[*]"
                COLUMNS (id INT PATH "$.id" ,
                         quantity MEDIUMINT PATH "$.quantity",
                         price DECIMAL(7,2) PATH "$.price",
                         `sum` DECIMAL(8,2) PATH "$.sum"
                         )) AS jtin 
                LEFT JOIN prais_informations AS pi ON jtin.id  = pi.code;

SET res = (SELECT count(*) FROM new_tbl WHERE jtin_qty > pi_qty);

IF res = 0 THEN 
/*
  Инсертим новую запись, получившийся id, будет являтся id чека
*/
INSERT INTO checks(`data`, `user`) VALUES ( UNIX_TIMESTAMP(), 0);
SET last_index = (SELECT max(id) FROM checks);
/*
  Инсертим содержимое массива заказа в таблицу регистрации
*/
INSERT INTO sales(`code`, `quantity`, `price`, `sum`, `idCheck`) SELECT nt.jtin_id, nt.jtin_qty, nt.pi_price, (nt.jtin_qty * nt.pi_price), last_index FROM new_tbl AS nt;

/*
  Обновляем остатки на складе
*/

END IF

END

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

Как вариант можно сделать триггер на insert в sales и делать update в price_information.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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