Mysql 如何解决此类查询?

Mysql 如何解决此类查询?,mysql,sql,Mysql,Sql,我在Mysql数据库中有两个表 套餐: ID (auto_increment) CATEGORY (INT) NAME (VARCHAR) EXPIRY (VARCHAR) VISIBLE (TINYINT) id (auto_increment) id_user (INT) id_package (INT) // It points to packages.id date (DATETIME) 例如: 1 | 1 | Package AAA_1 | INTERVAL 7 DAY | 1

我在Mysql数据库中有两个表

套餐:

ID (auto_increment)
CATEGORY (INT)
NAME (VARCHAR)
EXPIRY (VARCHAR)
VISIBLE (TINYINT)
id (auto_increment)
id_user (INT)
id_package (INT) // It points to packages.id
date (DATETIME)
例如:

1 | 1 | Package AAA_1 | INTERVAL 7 DAY  | 1
2 | 2 | Package BBB_1 | INTERVAL 1 YEAR | 1
3 | 1 | Packaga AAA_2 | INTERVAL 14 DAY | 1
1 | 1 | 1 | 2012-01-06 00:04:18
订阅:

ID (auto_increment)
CATEGORY (INT)
NAME (VARCHAR)
EXPIRY (VARCHAR)
VISIBLE (TINYINT)
id (auto_increment)
id_user (INT)
id_package (INT) // It points to packages.id
date (DATETIME)
例如:

1 | 1 | Package AAA_1 | INTERVAL 7 DAY  | 1
2 | 2 | Package BBB_1 | INTERVAL 1 YEAR | 1
3 | 1 | Packaga AAA_2 | INTERVAL 14 DAY | 1
1 | 1 | 1 | 2012-01-06 00:04:18
我的问题是单个用户可以对同一个包有更多订阅(因为当订阅到期时,将有一个新的订阅,我需要跟踪所有以前的订阅以了解每个用户的“故事”)

现在,我必须创建一个查询来提取所有包(其中
packages.visible=1
orderbypackages.category
)和

检查

该用户包的实际过期时间是多少

如您所见,我有
订阅。date
(这是用户进行订阅的日期),然后我必须在此日期添加
包。expiry
,以了解真正的过期日期。显然,我只需将subscription.date+package.expiration添加到用户对该特定软件包的最后一次订阅中

编辑:

ID (auto_increment)
CATEGORY (INT)
NAME (VARCHAR)
EXPIRY (VARCHAR)
VISIBLE (TINYINT)
id (auto_increment)
id_user (INT)
id_package (INT) // It points to packages.id
date (DATETIME)

显然,我必须将要检查的用户ID传递给此查询。

此select语句将为您提供所需的信息,但由于package Expiration字段似乎是自由格式的文本,因此我认为无法将其添加到上一个订阅日期

SELECT subscriptions.id_user, packages.name, MAX(subscriptions.date), packages.expiry
FROM subscriptions JOIN packages ON subscriptions.id_package = packages.id
WHERE packages.visible = 1
GROUP BY subscriptions.id_user, subscriptions.id_package
ORDER BY packages.category