下面用记事本写的代码,我明天检查一下。
更新:我检查了底部的代码,它在 SQL Server 中运行良好。
完成所需操作的最快捷、最简单的方法是将字段 last_update_date 添加到订单表中,然后:
这段代码返回你所有在一段时间内更新的记录和用户订阅的订单
select o.*, u.* from orders o
inner join user_subscribtions us on us.order_id = o.order_id
inner join users_intervals ui on ui.user_id = us.user_id and ui.interval = @interval
inner join users u on u.user_id = us.user_id
where o.last_update_date >= DATEADD(HOUR, @interval, GETDATE());
如果你有服务器并且可以创建服务
运行 2 个作业,它们将使用不同的时间间隔参数执行相同的过程。第一个作业将每 24 小时执行一次程序,参数为 -24(小时)
第二个作业将每周执行一次上述程序,参数为 -168(小时 = 周),该程序将在该时间段内更新所有订单
并将他们的数据插入到电子邮件表中
create procedure getAllUpdatedOrders @interval datetime as
begin
insert into emails_to_send
select o.*, u.* from orders o
inner join user_subscribtions us on us.order_id = o.order_id
inner join users_intervals ui on ui.user_id = us.user_id and ui.interval = @interval
inner join users u on u.user_id = us.user_id
where o.last_update_date >= DATEADD(HOUR, @interval, GETDATE());
end
GO
那么您需要定期检查表 emails_to_send 并从该表发送所有电子邮件的服务。
exec getAllUpdatedOrders -24; - 过去 24 小时内更新的所有订单 + 用户订阅订单和每日邮件
exec getAllUpdatedOrders -168; - 上周更新的所有订单 + 订阅订单和每周邮件的用户
如果您需要显示过去 24 小时或一周内某个订单的所有更新,您需要将此类更新存储在某个单独的表中至少一周并加入上述查询
获取订阅用户和订单在一段时间内更新的示例:
--drop TABLE orders;
--drop TABLE user_subscribtions;
--drop TABLE users_intervals;
CREATE TABLE orders(order_id int, last_update_date datetime);
CREATE TABLE user_subscribtions(id int, order_id int, user_id int);
CREATE TABLE users_intervals(id int, interval int, user_id int);
insert into orders values(1, '2015-02-15');
insert into orders values(2, '2015-02-02');
insert into user_subscribtions values(1, 1, 10);
insert into user_subscribtions values(1, 1, 11);
insert into users_intervals values(1, -24, 10);
insert into users_intervals values(1, -168, 11);
select o.*, us.* from orders o
inner join user_subscribtions us on us.order_id = o.order_id
inner join users_intervals ui on ui.user_id = us.user_id and ui.interval = -24
where o.last_update_date >= '2015-02-15';