SQLinfo.ru - Все о MySQL Highload++ 2017

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 13.07.2017 13:02:43

Pantela777
Завсегдатай
Зарегистрирован: 06.06.2016
Сообщений: 39

Оптимизировать процедуру

Помогите оптимизировать процедуру.
Логика: Считаю стартовый день, до текущего дня, и начисляю сумму. Но у меня 2 условия: если loan_type == 1, тогда надо использовать car_sale_date и short_amount, а если loan_type == 2, тогда car_date_of_output и short_amount
Процедуру вызываю по параметру

IN `DD` int
напр. DD = 15.


Думаю через один UPDATE сделать через IF.
+ нужен мне вобще INNER JOIN? это всё и так в одной таблице происходит...
спс.Ув.

BEGIN

UPDATE base
SET short_amount = (CEIL(DATEDIFF(DATE(CURDATE()+DD), finance_update)/DD)*DD)/procent_rate*car_finance_price/100+short_amount
WHERE `status`='3' AND loan_type = '1' AND `id`= `id`;


UPDATE base
SET long_amount = (CEIL(DATEDIFF(DATE(CURDATE()+DD), finance_update)/DD)*DD)/procent_rate*car_finance_price/100+long_amount
WHERE `status`='3' AND loan_type = '2' AND `id`= `id`;

END

Отредактированно Pantela777 (14.07.2017 12:27:40)

Неактивен

 

#2 14.07.2017 13:29:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5269

Re: Оптимизировать процедуру

не вижу в процедуре использования car_sale_date и car_date_of_output
зачем числа заключены в кавычки?
для чего условие `id`= `id`?

UPDATE base
SET long_amount = if(loan_type = 2, (CEIL(DATEDIFF..+long_amount, long_amount),
short_amount = if(loan_type = 1, (CEIL(DATEDIFF..+short_amount, short_amount)
WHERE `status`=3 AND loan_type in(1,2);

Отредактированно vasya (14.07.2017 13:32:59)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson