0

是否可以将 SQL 查询的条件强加于两个条件中的较大者?

例如,想象一个有帖子的网站。有没有办法请求帖子,以保证结果至少包含过去 24 小时内发布的所有帖子和至少 10 个帖子,但不会不必要地超过任何一个限制?

即,如果它已经有过去 24 小时内的所有帖子,但不是 10 个帖子,它会继续添加帖子,直到达到 10 个,或者如果它已经有 10 个帖子,但不是过去 24 小时内的所有帖子,它将持续到涵盖过去 24 小时,但不会同时包含 25 小时前的帖子和超过 10 个帖子。

编辑:响应发布我的模型的请求。我不确定如何发布模型,因为我的模型是由 Rails 创建的。然而,简而言之,一个 Post 有一个 created_at 日期时间行,并且上面有一个索引。

4

2 回答 2

1

我认为LIMIT需要一个常量,但是如果您在该created字段上有一个索引,那么从一端拉几条记录将非常有效,对吧?类似的东西(在 SQL-ish 伪代码中)怎么样:

select * from posts
where created > min(one_day_ago,
                    (select created from posts
                     order by created desc
                     limit 1 offset 10));
于 2010-03-05T01:17:55.307 回答
0

可能最明确的解决方案是创建一个返回最近 10 个的选择,另一个返回最后一天所有内容的选择,并使用这两个选择的联合。

这些联合选择中的一个总是会完全包含另一个,所以它可能不是最有效的,但我认为这是我会做的。

于 2010-03-05T02:02:40.567 回答