我有一个cron作业设置,每24小时查看订阅表中的值更改,如果当前日期超过订阅的结束日期,状态字段值变为“非活动”
$curdate=date('Y-m-d');
$sql=("UPDATE subscription SET status='inactive' WHERE (end_date < '$curdate')");
我想使用上面的cron作业向订阅刚刚过期的用户发送电子邮件,我需要检索同样订阅表中存储的user_id ..
有没有办法可以运行SELECT QUERY以及上面的UPDATE QUERY并检索订阅刚刚过期的用户的user_id?
谢谢,
答案 0 :(得分:1)
分两个阶段进行:
SELECT user_id
FROM subscriptions
WHERE status='active' AND (end_date < '$curdate')
检索所有过期的ID。获取id列表并将其填入更新查询中:
UPDATE subscriptions SET ... WHERE (user_id IN ($list_of_ids_from_before))
然后重新使用ID列表生成电子邮件。
答案 1 :(得分:0)
你可以
一个。首先运行您的选择并获取即将过期的user_ids,然后运行查询以使它们过期。如果第一次失败,您可能会有两次运行更新。
B中。您可以在订阅时创建触发器,将记录写入您的cron脚本可以使用的过期通知队列等,并生成电子邮件
℃。您可以在订阅表中添加过期日期,然后在事后查询表以查找“今天”过期的订阅
答案 2 :(得分:0)
使用事务并首先执行具有相同WHERE条件的SELECT语句。