1

我希望我能正确解释这一点。这里是:

我有一个 id 列表,我需要根据订阅状态在 mysql 表中检查,以找出这些 id 中有多少是当前的。我有 id 和 subscriptionEnd。我的查询不工作,我没有足够的知识知道如何做到这一点。请查看并与我分享我能做些什么。我需要匹配数以千计的 id。

SELECT c.id, c.subscriptionEnd
FROM subscriptions c
WHERE c.subscriptionEnd > '2013-01-27`
AND c.id = 12345
AND c.id = 12939
....

这个列表一直在继续,我发现这行不通。但问题是我不知道如何让它工作。非常感谢任何关于我如何检查和获取订阅结束大于给定日期的 id 的结果的解决方案。

谢谢

4

1 回答 1

1

您最好的选择是,因为您有 1000 个值要检查,所以将要检查的所有 id 插入到临时表中 - 让我们checkIds用单列调用表id

然后你可以简单地做:

SELECT c.id, c.subscriptionEnd
FROM subscriptions c
INNER JOIN checkIds ON c.id = checkIds.id
WHERE c.subscriptionEnd > '2013-01-27'

完成后,最后删除临时表。


其他解决方案包括:

  • 一个巨大而笨拙的IN子句,这可能是一场性能噩梦:

    SELECT c.id, c.subscriptionEnd
    FROM subscriptions c
    WHERE c.subscriptionEnd > '2013-01-27'
    AND c.id IN (12345, 12939, ...)
    
  • 在您的 ID 列表中查找模式:

    SELECT c.id, c.subscriptionEnd
    FROM subscriptions c
    WHERE c.subscriptionEnd > '2013-01-27'
    AND (c.id = 12345
        OR c.id BETWEEN 12939 AND 12951
        OR ...)
    
于 2013-01-28T18:55:26.167 回答