1

我需要知道一个表是否有超过 50 行符合某些标准。因此,原始查询应如下所示:

SELECT COUNT(id) FROM (SELECT id FROM table WHERE {conditions} LIMIT 50)

但我无法通过雄辩的方式做到这一点。这是我到目前为止尝试过的......

card::where( ... )->limit(50)->count("id");

...但这不起作用。它不会对限制进行子查询,因此限制变得无用。

如果不运行受限制的子查询,查询最多需要 10 倍的时间......恐怕它不会像我需要的那样具有可扩展性。

4

2 回答 2

1

我最终确实想出了一个解决方案,我只是没有发布它(直到现在)。您可以获取第 50 条记录的 ID 以查看它是否存在:

$atLeastFifty = Card::offset(50)->value("id");

if(!empty($atLeastFifty)){
    // there are at least 50 records
}else{
    // there are less than 50 records
}

这比表中有大量记录时要快得多。count()

于 2019-07-08T08:39:33.057 回答
0

如果您只想计算列数,请使用count()不带参数:

$numberOfRows = Card::where(....)->take(50)->count();
于 2017-01-29T08:25:21.793 回答