Php MySql限制和偏移量给出错误结果
在9900偏移量之后,限制100的记录只有99条。尽管我在数据库中有200000条记录,但在两个表中都使用了left join和distinct。我的查询或循环有什么问题 即使我在phpmyadmin中尝试了该查询,也得到了相同的结果99条记录 查询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
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();
$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();
因此,最后,我的假设是,左联接表中的空值可能会给出错误的结果。告诉我们数据库中有多少记录是没有意义的。更相关的是正在联接的两个表中的记录数,以及左联接如何增加结果集中可能的记录数。另外,使用
DISTINCT
可能会影响记录数。@TimBiegeleisen 200000条记录,在两个表中都有左连接