【发布时间】:2019-10-21 20:35:19
【问题描述】:
我正在尝试在 MySQL 中编写一个查询,该查询基于加入的 transactions 的 expiration 列检索 subscription 记录。
subscription 可以有 0 个或多个 transaction 记录,transaction.expiration 可以是 NULL 或 Datetime。我想检索在过去 6 小时内过期的订阅,但前提是订阅没有过期为 NULL 的事务(这意味着订阅不会过期)。
这是我现在的查询:
SELECT subscription.id
FROM app_subscriptions AS subscription
JOIN (
SELECT subscription_id
FROM app_transactions
WHERE (
expiration >= %s
AND expiration <= %s
AND expiration IS NOT NULL
)
GROUP BY subscription_id
) as transaction
ON subscription.id = transaction.subscription_id
ORDER BY subscription.id DESC
日期时间比较使用 PHP 设置(格式为 0000-00-00 00:00:00)
针对两个订阅对此进行测试:
-
第一个有一个过期的交易。这应该在结果中。
-
第二个事务有两个事务,一个过期过期,另一个过期为 NULL。这不应该出现在结果中。
使用上面的查询,当我只想要第一个时,仍然返回两个订阅。我不确定我在这里做错了什么。很高兴提供更多信息!
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出(包括逐字错误消息)的示例输入(作为初始化代码);标签和版本;明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)对于包含 DBMS/产品和 DDL 的 SQL,其中包括约束和索引以及表格格式的初始化。