1

给出以下查询:

Cars.where(color: red).limit(5)

有没有办法判断是否达到了限制。假设有 6 辆红车,是否需要单独查询才能统计红车总数?

基本上,我试图向用户发送一条消息,让他们知道由于达到允许的最大结果数,搜索受到限制。

4

2 回答 2

3

将它组合到一个查询中的唯一方法是执行限制(6)。如果大小为 6,则删除最后一个元素并记录它们是更多的结果。

或者,单独查询 Cars.where(color: red).count。尽管这将执行单独的 SQL 查询,但计数查询有时对数据库来说非常快。

于 2013-01-07T18:52:06.653 回答
0

对您的问题的直接回答是,您无法在一次查询中获取此信息。您将必须运行两个查询:一个返回有限集,一个查找总数。

唯一不需要这样做的情况是当您查询结果的第一页(偏移量为 0)并且返回的结果数小于限制值时(例如,您将限制设置为 5 但得到 4 个结果背部)。

示例代码如下所示:

    limit = 5
    cars_scoped = Cars.where(color: red)
    cars = cars_scoped.limit(limit)
    cars_count = cars.length < limit ? cars.length : cars_scoped.count
于 2013-01-07T19:11:57.090 回答