По сути, я создаю простой аукционный сайт. Я хочу, чтобы код проверял каждую ночь в 21:00 на предмет предметов, срок действия которых истекает сегодня. Если он их обнаружит, он должен вставить в базу данных участника, предложившего самую высокую цену, в качестве покупателя. Вот что у меня пока не работает:
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 ;
«Сегодня» где-то между 9 и полуночью?
@SpacePhoenix Он находится на сервере Windows, поэтому я потенциально могу использовать запланированные задачи.
@Strawberry от Today Я имею в виду любой пост, срок действия которого истекает сегодня. У меня не было времени ввода пользователей, только даты
Понятно - значит, заявки запечатаны?






Идентификаторы переменных DECLAREd в MySQL не начинаются с @; это только для переменных «сеанса» (которые являются глобальными для соединения с базой данных).
Также:
== - это не оператор равенства в MySQL, а просто =.set variable = select ... может иметь проблемы, если выбор не может гарантировать единственный результат; некоторым из них могут потребоваться пункты LIMIT 1 ... хотя похоже, что вы просто проверяете наличие данных, поэтому запросы EXISTS могут быть более полезными для них.*/ здесь не место, он предназначен для закрытия комментариев блока.Также
DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.
от https://dev.mysql.com/doc/refman/8.0/en/declare.html
Это означает, что вы не можете чередовать DECLARE и SET.
благодарю вас! Я обновил его, но он по-прежнему не работает эффективно.
см. отредактировать список вещей, которые я заметил, помимо имен переменных.
Спасибо вам за все это. Это было большим подспорьем. Я борюсь с объявлениями переменных. Я чувствую, что это правильно, но он продолжает выдавать ошибки. DECLARE amt INT; SET amt = SELECT COUNT(1) FROM ITEMS; DECLARE test char(80) = ""; DECLARE counter INT; SET counter = 0;
Есть ли у вас доступ к работе cron?