Laravel Eloquent每隔N排跳过一次

时间:2015-03-25 16:15:39

标签: mysql laravel laravel-4 eloquent laravel-5

我有一个大型数据库,有50000多行,我试图获取所有行但例如每50行跳过一次。

我从Laravel文档中尝试过这个:Offset&限制

$users = DB::table('users')->skip(10)->take(5)->get();

但这只会跳过前10行并获得接下来的5行。我无法找到解决这个问题的雄辩解决方案。

anybode之前有没有解决过这个问题?

2 个答案:

答案 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 ......直到表的末尾