【发布时间】:2014-07-22 12:19:32
【问题描述】:
在我的项目中,我需要未过期的用户订阅计划。当用户订阅一个计划时,它将被输入到一个表usersubscription中,其结构如下所示:
id user_id plan_id subscribed_on
存储计划详情的表是subscription_plans:
id plan days_limit discounted_rate added_on status rate
1 PlanJ 30 240 1403094260 1 245.00
此表将包含项目中订阅计划的详细信息。视频可以是一个或多个计划的一部分。如果视频在计划中,它将存储在数据库subscribed_videos中。
id plan_id videoid
一个计划也可以是另一个计划的一部分。也就是说,假设有计划说 A 和 B。视频 1 是计划 B 的一部分,计划 a 也包含计划 B(相关计划)。因此,如果用户订阅了计划 A,那么计划 B 中的视频将可供他使用。关联计划的表格是subscription_groups。结构共享如下:
id plan_id assosiated_plan_id added_on
我需要检查用户是否订阅了未过期的计划(包含所选视频)(即,它将在 subscribed_on+days_limit 天过期)。我现在使用的当前查询是
select u.id,sp.days_limit from usersubscription as u INNER JOIN subscription_plans as
sp ON sp.id=u.plan_id where (plan_id IN ( ( SELECT DISTINCT plan_id FROM subscribed_videos
sv where sv.videoid = 57 ) ) OR id IN ( SELECT DISTINCT assosiated_plan_id AS plan_id FROM
subscription_groups sg JOIN subscribed_videos sv ON sv.plan_id = sg.plan_id WHERE
sv.videoid = 57 ) ) and u.user_id=1 AND DATE_ADD(FROM_UNIXTIME(u.subscribed_on), INTERVAL
sp.days_limit DAY) > NOW()
这将检查 ID 为 1 的用户是否订阅了包含 ID 为 57 的视频的任何计划(主计划或相关计划)。我将日期保存为整数(unix 时间戳)。
谁能帮我找到解决这个问题的方法?请检查此SQL FIDDLE
提前致谢
【问题讨论】:
标签: php mysql intervals unix-timestamp