我有一个大型数据库,有50000多行,我试图获取所有行但例如每50行跳过一次。
我从Laravel文档中尝试过这个:Offset&限制
$users = DB::table('users')->skip(10)->take(5)->get();
但这只会跳过前10行并获得接下来的5行。我无法找到解决这个问题的雄辩解决方案。
anybode之前有没有解决过这个问题?
答案 0 :(得分:1)
使用原始查询解决:
return DB::select(DB::raw('
SELECT dateTime, row1, row2
FROM (
SELECT @row := @row +1 AS rownum, dateTime, row1, row2
FROM (
SELECT @row :=0
) r, users
) ranked
WHERE rownum % 50 = 0'));
这是@ disf.asia建议的更快解决方案。
答案 1 :(得分:0)
你必须使用循环。
$start = 0;
$skip = 50;
$take = 1;
$all = array();
do {
$partial = User::skip($start++ * $skip)->take($take)->get();
$all = array_merge($all, (array) $partial);
} while (count($partial) > 0);
每50skipped行需要1行,所以1st,51th,100th ......直到表的末尾