Полагаю, это скорее вопрос шаблона проектирования, чем вопрос SQL.
В моем приложении пользователь может присоединиться, создать магазин и загрузить товары в своем магазине (скажем, есть пользователь, магазин (один к одному) и товары (многие к одному с магазинами).
Итак, я хочу иметь возможность делать определенные вещи, основываясь на времени и критериях (но только один раз), например, если через неделю после присоединения к пользователю нет магазина, я хочу отправить электронное письмо, или через 2 недели после присоединения с Магазин, но ни один продукт не отправлять по электронной почте и т. д. - но я хочу сделать это только один раз.
Это единственный запущенный один раз, который делает мою голову - например, скажем, у меня был этот запрос
select * from user where joineddt < '1 week ago date'
И у меня был скрипт, который запускался каждые 3 часа, запускал SQL, а затем делал любое событие (например, отправлял электронное письмо). Затем я хотел бы убедиться, что если этот скрипт будет запущен снова, он не подберет пользователей, которые уже были обработаны. Я думал о представлении таблицы «событий», в которой после запуска события для пользователя регистрируется запись для этого события, но опять же, похоже, это не работает. Например, скажем, у меня была таблица событий, был идентификатор, пользователь, событие
select * from user a
left join event b on b.user = a.id
where a.joineddt < '1 week ago date'
and b.event = 'userjoined'
and b.id is null
Так что, когда в событиях нет возможности для события 'userjoined', он не вернет результатов ... Но на самом деле я хочу, чтобы он возвращал пользователей, у которых нет событий в таблице событий для этого 'userjoined' событие?
Так может ли кто-нибудь придумать способ сделать то, что я предлагаю?