如何解决这种查询?

时间:2012-01-15 14:07:02

标签: mysql sql

我在Mysql数据库中有两个表。

PACKAGES:

ID (auto_increment)
CATEGORY (INT)
NAME (VARCHAR)
EXPIRY (VARCHAR)
VISIBLE (TINYINT)

实施例

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

订阅:

id (auto_increment)
id_user (INT)
id_package (INT) // It points to packages.id
date (DATETIME)

实施例

1 | 1 | 1 | 2012-01-06 00:04:18

我的问题是,一个sigle用户可以拥有更多订阅同一个包(因为订阅到期时会有一个新订阅,我需要跟踪所有以前的订阅以了解每个用户的“故事”)< / p>

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

CHECK

该用户包的实际到期时间。

如您所见,我有subscriptions.date(这是用户进行订阅的日期),那么我必须在此日期添加packages.expiry以了解实际到期日期。显然,我只需将subscription.date + package.expiry添加到用户对该特定包的 LAST 订阅中。

修改

显然,我必须向我的查询传递我想要检查的用户的ID。

1 个答案:

答案 0 :(得分:1)

此选择语句将为您提供所需的信息,但由于包裹到期字段似乎是自由格式文本,我认为没有办法将其添加到上一个订阅日期。< / p>

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