UPDATE personal_card SET
if bank_book >= price_tariff
bank_book = bank_book - price_tariff,
bank_pay = bank_pay + price_tariff,
stop_date = DATE_ADD(CURDATE(),Interval 1 MONTH)
else
pay_status = '0'
WHERE stop_date = CURDATE()
Не могу разобраться в условиях IF ELSE, проверяем bank_book >= price_tariff, если TRUE до выполняем условие, если нет, то изменяем pay_status = '0'. Понимаю что можно сделать двумя разными запросами, но мне кажется что в одном, это правильнее.
Спасибо!
Дополнительная переменная заведена чтобы не выполнять проверку для всех полей, а только один раз на строку.
Первый вариант:
SET @MyVar = 1;
UPDATE personal_card
SET
bank_book = IF(@MyVar := bank_book >= price_tariff,
bank_book - price_tariff,
bank_book),
bank_pay = IF(@MyVar,
bank_pay + price_tariff,
bank_pay),
stop_date = IF(@MyVar,
DATE_ADD(CURDATE(),Interval 1 MONTH),
stop_date),
pay_status = IF(@MyVar, 1, 0)
WHERE stop_date = CURDATE()
Второй вариант:
SET @MyVar = 1;
UPDATE personal_card
SET bank_book = (CASE
WHEN @MyVar := bank_book >= price_tariff
THEN bank_book - price_tariff
ELSE bank_book
END),
bank_pay = (CASE
WHEN @MyVar
THEN bank_pay + price_tariff
ELSE bank_pay
END),
stop_date = (CASE
WHEN @MyVar
THEN DATE_ADD(CURDATE(),Interval 1 MONTH),
ELSE stop_date
END),
pay_status = (CASE
WHEN @MyVar
THEN 1
ELSE 0
END)
WHERE stop_date = CURDATE();
Третий вариант:
UPDATE personal_card
SET bank_book = bank_book - price_tariff,
bank_pay = bank_pay + price_tariff,
stop_date = DATE_ADD(CURDATE(),Interval 1 MONTH),
pay_status = 1
WHERE bank_book >= price_tariff AND stop_date = CURDATE();
UPDATE personal_card
SET pay_status = 1
WHERE bank_book < price_tariff AND stop_date = CURDATE();
UPDATE personal_card SET
bank_book = IF(bank_book >= price_tariff, bank_book - price_tariff, bank_book),
bank_pay = IF(bank_book >= price_tariff, bank_pay + price_tariff, bank_pay),
stop_date = IF(bank_book >= price_tariff, DATE_ADD(CURDATE(),Interval 1 MONTH), stop_date),
pay_status = IF(bank_book >= price_tariff, '0', '1')
WHERE stop_date = CURDATE()
Сделал так. На сколько это грамотно? Если будет более 1000 строк?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я парсю сайтМне нужно распарсить 2 категории Fresh и Bekery и занести данные в БД
При добавлении новой строки в таблицу выскакивает ошибка ERROR 1442 (HY000): Can't update table 'parts' in stored function/trigger because it is already used by statement which invoked this stored...
Есть 2 идентичные по полям таблицы в одной БДsirovyna и zayavki
Не могу понять как модернизировать код, чтобы сделать дозапись в файл без использования проверки на существование файла