Прикладываю процедуру, которую сделал на данный момент, из проблем 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