我需要知道一个表是否有超过50行符合某些条件。因此,原始查询应如下所示:
SELECT COUNT(id) FROM (SELECT id FROM table WHERE {conditions} LIMIT 50)
card::where( ... )->limit(50)->count("id");
......但这不起作用。它没有使子查询达到极限,因此限制变得无用。
如果不运行有限的子查询,查询需要花费10倍的时间.....我担心它不会像我需要的那样具有可扩展性。
答案 0 :(得分:0)
如果您只想计算列数,请使用不带参数的count()
:
$numberOfRows = Card::where(....)->take(50)->count();
答案 1 :(得分:0)
我最终确实提出了解决方案,但直到现在我还没有发布。您只需获取第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()
快。