Событие MySql, которое обновляется ежедневно и изменяет некоторые элементы в базе данных в зависимости от их содержимого. - PullRequest
0 голосов
/ 04 мая 2018

По сути, я создаю простой аукционный сайт. Я хочу, чтобы код проверял каждую ночь в 9 вечера на предмет того, срок действия которого истекает сегодня. Если он найдет, он должен вставить самую высокую цену в базу данных в качестве покупателя. Вот что у меня пока что не работает:

DELIMITER $$

CREATE 
    EVENT `sold` 
    ON SCHEDULE EVERY 1 DAY STARTS '2018-05-03 21:00:00' 
    DO BEGIN
        declare amt int;
        declare counter int;
        set counter=0;
        set amt = SELECT COUNT(*) FROM ITEMS;
        declare test;
while (counter < amt)
begin
    set test = select Visibility FROM ITEMS where Keyy = counter;
    if (test == 1)
        set test = select sold from ITEMS where Keyy = counter;
        if (!test)
            set test = select Exp from ITEMS where Keyy = counter;
            if (test == CURDATE())
                UPDATE ITEMS SET `sold`= `bidder` WHERE Keyy =counter;
set counter = counter + 1;

end

    END */$$

DELIMITER ;

1 Ответ

0 голосов
/ 04 мая 2018

Идентификаторы для DECLARE d переменных в MySQL не начинаются с @; это только для переменных сеанса (которые являются глобальными для соединения с базой данных).

Также:

  • «test» не был объявлен с типом
  • == не является оператором равенства в MySQL, просто =
  • set variable = select ... могут возникнуть проблемы, если выбор не может гарантировать один результат; некоторые из них могут нуждаться в предложениях LIMIT 1 .... хотя похоже, что вы просто проверяете наличие данных, поэтому запросы EXISTS могут быть более полезными для них.
  • в вашем приращении отсчета в конце отсутствует SET
  • */ не принадлежит там, это закрытие комментариев к блоку.

Также

DECLARE разрешено только внутри составного оператора BEGIN ... END и должен быть в начале перед любыми другими утверждениями .

от https://dev.mysql.com/doc/refman/8.0/en/declare.html

Это означает, что вы не можете чередовать DECLARE и SET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...