СОБЫТИЯ на MYSQL не работают на phpmyadmin - PullRequest
0 голосов
/ 16 января 2019

У меня возникла проблема при создании события в MySql.

Несколько дней назад я купил сервер и добавил всю информацию о моих страницах, включая базу данных.

Я хочу выполнять ОБНОВЛЕНИЕ каждые 24 часа в определенной таблице с именем: NEWAHORROSH

, который содержит данные:

CREATE TABLE newahorrosh (
id int not null auto_increment primary key,
user_id int not null,
capital_real float (11,2) not null,
interests float (11,2) not null,
capital_total float (11,2) as (capital_real + interest)
);

Код моего мероприятия:

DELIMITER |

CREATE EVENT CalculoIntereses
ON SCHEDULE EVERY 24 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
BEGIN
    IF (newahorrosh.capital_real> 1 AND newahorrosh.capital_real <500) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 3 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 5001 AND newahorrosh.capital_real <1000) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 4 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 1001 AND newahorrosh.capital_real <5000) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 5 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 5001 AND newahorrosh.capital_real <15000) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 6 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 15001) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 7 * 1/36000));
    END IF;

END |

DELIMITER;

Событие создается без ошибок, но когда наступает время, когда информация должна быть обновлена, оно не выполняется. Я уже заметил, что в моем phpmyadmin было включено расписание событий.

Я повторяю, это не выдает ошибку при создании события, но когда я открываю свое событие в моем phpmyadmin, оно показывает X ошибок в моем коде

ошибка

Я был бы очень признателен за помощь, потому что у меня есть почти 2 недели, чтобы решить эту проблему. Тысяча благодарностей за ваше время.

1 Ответ

0 голосов
/ 16 января 2019

Откуда берется newahorrosh.capital_real при выполнении события?

Поскольку в настоящее время нет оператора ELSE и нет значения для сравнения, все проверки не пройдены, и ничего не выполняется.

SQL внутри тела события оценивается только во время выполнения , то есть когда происходит событие. При определении события SQL не оценивается и может фиксироваться даже при синтаксических ошибках в коде.

Таким образом, вы никогда не увидите ошибку в phpMyAdmin, даже если содержание вашего мероприятия - полная чушь.

Вам нужно запустить SELECT, чтобы получить какое-то значение для сравнения в вашем IF утверждении.

Или вы пишете оператор UPDATE и используете IF() или CASE для динамического вычисления нового значения для каждой строки, например:

DELIMITER |

CREATE EVENT CalculoIntereses
ON SCHEDULE EVERY 24 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
BEGIN
UPDATE newahorrosh SET interests = interests + (1/36000 * capital_real * 
  (CASE 
    WHEN capital_real < 500   THEN 3
    WHEN capital_real < 1000  THEN 4
    WHEN capital_real < 5000  THEN 5
    WHEN capital_real < 15000 THEN 6
    ELSE 7
  END)
);
END |
DELIMITER;

Кстати: у вас также есть опечатка / пробел в вашем начальном IF утверждении:

newahorrosh.capital_real> 5001 AND newahorrosh.capital_real <1000

Полагаю, вы хотели написать:

newahorrosh.capital_real> 501 AND newahorrosh.capital_real <1000

Таким образом, даже если ваш код будет работать так, как задумано, он все равно не будет работать для значений между 501 и 1000. Ничего не произойдет со значениями в этом диапазоне.

...