У вас все поля в пределах одной таблицы. Почему не
вычисляемое поле?
Как указал
Akina использовать
NOW()
нельзя, но с учётом того, что срабатывание триггера выполняется только один раз, в момент на которое указывает поле
modified
можно использовать его. Также приведя условия статуса к верной логике получаем (
MySQL online):
-- create
CREATE TABLE airdrops (
start_date datetime NOT NULL,
end_date datetime NOT NULL,
modified timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
status int(11) AS ( case
when modified < start_date THEN 0
when modified >= start_date AND modified <= end_date THEN 1
when modified > end_date THEN 2
else -1
end )
);
-- insert
INSERT INTO airdrops (start_date, end_date) VALUES ( '2024-03-12', '2024-03-31') ;
INSERT INTO airdrops (start_date, end_date) VALUES ( '2024-03-01', '2024-03-31') ;
INSERT INTO airdrops (start_date, end_date) VALUES ( '2024-03-02', '2024-03-09') ;
-- fetch
SELECT * FROM airdrops;
статус 2 устанавливался автоматически если текущая дата
Использовать представление (
MySQL online)
-- create
CREATE TABLE airdrops (
start_date datetime NOT NULL,
end_date datetime NOT NULL
);
-- insert
INSERT INTO airdrops (start_date, end_date) VALUES ( '2024-03-12', '2024-03-31') ;
INSERT INTO airdrops (start_date, end_date) VALUES ( '2024-03-01', '2024-03-31') ;
INSERT INTO airdrops (start_date, end_date) VALUES ( '2024-03-02', '2024-03-09') ;
-- view
CREATE VIEW airdrops_status
AS
SELECT start_date, end_date,
case
when NOW() < start_date THEN 0
when NOW() >= start_date AND NOW() <= end_date THEN 1
when NOW() > end_date THEN 2
else -1
end AS status
FROM airdrops;
-- fetch
SELECT * FROM airdrops_status;