Php MySql限制和偏移量给出错误结果

Php MySql限制和偏移量给出错误结果,php,mysql,laravel,orm,laravel-5.2,Php,Mysql,Laravel,Orm,Laravel 5.2,在9900偏移量之后,限制100的记录只有99条。尽管我在数据库中有200000条记录,但在两个表中都使用了left join和distinct。我的查询或循环有什么问题 即使我在phpmyadmin中尝试了该查询,也得到了相同的结果99条记录 查询 select distinct(table1.id), table2.name, table2.uuid from table1 left join table2 on table1.id = table2.id limit 990

在9900偏移量之后,限制100的记录只有99条。尽管我在数据库中有200000条记录,但在两个表中都使用了left join和distinct。我的查询或循环有什么问题

即使我在phpmyadmin中尝试了该查询,也得到了相同的结果99条记录

查询

select distinct(table1.id), table2.name, table2.uuid from table1
        left join table2 on table1.id = table2.id limit 9900, 100
Laravel查询:

$this
->database
->table('table1')
->selectRaw('distinct(table1.id), table2.uuid, table2.name')
->leftJoin('table1.id', '=', 'table2.id')
->where('opponent_uID', '>', $uID)
->skip($offset)
->take($limit)
->get();
循环

$limit = 100;
$offset = 0;
while (true) {
     $result = $this->query($limit, $offset);
     $offset += $limit;
     if (empty($result)) {
         break;
     }
     // Logic here
}

这可能不是正确的答案,以解决它为什么要给出99条记录。但是当我玩这个查询时,我发现了这些解决方案

问题:

$this
->database
->table('table1')
->selectRaw('distinct(table1.id), table2.uuid, table2.name')
->leftJoin('table1.id', '=', 'table2.id')
->where('opponent_uID', '>', $uID)
->skip($offset)
->take($limit)
->get();
  • 查询的一个主要问题是我没有order by MySQL MyISAM表不保证在没有out order by on的情况下得到结果 限制、偏移

    解决方案:

    $this
    ->database
    ->table('table1')
    ->selectRaw('distinct(table1.id), table2.uuid, table2.name')
    ->leftJoin('table1.id', '=', 'table2.id')
    ->where('opponent_uID', '>', $uID)
    ->skip($offset)
    ->take($limit)
    ->get();
    
  • 在查询中使用ORDERBY,给出100个结果,但未对整个循环进行测试

    从table1中选择distinct(table1.id)、table2.name、table2.uuid左连接table1.id=table2.id按table1.id限制排序9900100

  • 奇怪的是,如果我使用table2.*而不是同一查询中的某些字段,而不使用out order by,则会给出100条记录

    选择不同的(table1.id),table2.*从table1左侧加入table1.id=table2.id按table1.id排序限制9900100


  • 因此,最后,我的假设是,左联接表中的空值可能会给出错误的结果。

    告诉我们数据库中有多少记录是没有意义的。更相关的是正在联接的两个表中的记录数,以及左联接如何增加结果集中可能的记录数。另外,使用
    DISTINCT
    可能会影响记录数。@TimBiegeleisen 200000条记录,在两个表中都有左连接